DataView.Rowfilter, фильтрующий набор данных родительской формы

Я пытаюсь отфильтровать данные. Итак, у меня есть следующий обработчик событий:

private void Break_ValueChanged(object sender, EventArgs e)
  {
     DataView dvBreaks = ParentForm.CurrentUser.Cache.GetERPLuTableFromCache( Db.CustomDbMetaData.CachedTables.Breaks ).DefaultView;
     if( Convert.ToString( Break.Value ) != string.Empty ) {
        dvBreaks.RowFilter = "BREAK = '" + Convert.ToString( Break.Value ) + "'";
     }
  }

Когда я смотрю на этот код, я понимаю, что он должен фильтровать данные ТОЛЬКО в dvBreaks, однако данные в родительской форме фактически фильтруются. Я мог бы обойти эту проблему с помощью цикла, но я подумал, что было бы неплохо использовать меньше кода - и, возможно, сделать этот процесс более эффективным.

Кто-нибудь может пролить свет на это для меня?

1 ответ

Решение

Он фильтрует родительскую форму, потому что вы получаете ссылку из родительской формы. Если вы хотите, чтобы он фильтровал только дочерний объект, вам понадобится его копия для дочернего объекта и использование этой копии для привязки данных.

Вы можете изменить код следующим образом:

private void Break_ValueChanged(object sender, EventArgs e)
{
    DataView dvBreaks = ParentForm.CurrentUser
        .Cache
        .GetERPLuTableFromCache( Db.CustomDbMetaData.CachedTables.Breaks )
        .DefaultView
        .ToTable()
        .DefaultView;

    if( Convert.ToString( Break.Value ) != string.Empty ) {
        dvBreaks.RowFilter = "BREAK = '" + Convert.ToString( Break.Value ) + "'";
    }
}

или, если GetERPLuTableFromCache это DataTable:

DataView dvBreaks = ParentForm.CurrentUser
    .Cache
    .GetERPLuTableFromCache( Db.CustomDbMetaData.CachedTables.Breaks )
    .Copy()
    .DefaultView;
Другие вопросы по тегам