Tips and Tricks: RowFilter и DataTable

понедельник, 1 февраля 2010, Александр Краковецкий

Пусть у нас есть DataTable:

DataTable dt = new DataTable("Names");
dt.Columns.Add("Age");
dt.Columns.Add("Name");
dt.Columns.Add("State");
dt.LoadDataRow(new Object[] { "20", "Ken Tucker", "Florida" }, true);
dt.LoadDataRow(new Object[] { "21", "Cor Ligthert", "Netherlands" }, true);
dt.LoadDataRow(new Object[] { "22", "Terry Burns", "United Kingdom" }, true);
dt.LoadDataRow(new Object[] { "23", "Armin Zignler", "Germany" }, true);
dt.LoadDataRow(new Object[] { "25", "Herfried K. Wagner", "Austria" }, true);
dt.LoadDataRow(new Object[] { "25", "Jay B Harlow", "New York" }, true);

Необходимо оставить только строки, которых Age = 25 (таких строк две). Для этого пишем следующий код:

int was = dt.Rows.Count;
dt.DefaultView.RowFilter = @"Age = 25";
int became = dt.Rows.Count;
Console.WriteLine("Without DataView - was: {0} became: {1}", was, became);

В результате мы получим:

Without DataView - was: 6 became: 6

Т.е. использование RowFilter не удаляет строки из DataTable.

Правильный вариант - использовать дополнительный DataView:

DataView dv = new DataView(dt);
int was = dv.Count;
dv.RowFilter = @"Age = 25";
int became = dv.Count;
Console.WriteLine("With DataView - was: {0} became: {1}", was, became);

В результате мы получим:

Without DataView - was: 6 became: 2

Для того, чтобы получить обратно DataTable, используем выражение dv.ToTable() (не перепутайте с dv.Table - так как данное выражение вернет исходный DataTable).


Ищите нас в интернетах!

Комментарии

Свежие вакансии