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;