数据视图筛选器无法正常工作
Data view filter not working correctly
我有以下代码
DataView dv = new DataView(dsModels.Tables[0]);
string strFilter = "MODEL = 'PISTON'";
dv.RowFilter = strFilter;
string strPN = dv.Table.Rows[0]["PN"].ToString();
数据视图 dv
在应用过滤器之前有 35 行的计数。
在我应用过滤器后 dv.count 是 1
但是当我将 strPN 设置为过滤后的 DV 的值时,我得到了第一行的 pn 值。
如果我用 15 设置字符串;
我得到 15 行 pn 值,即使 DV 的计数为 1 ????
如何获取 Model= PISTON
的过滤器行的值
摘自dataview.rowfilter
and dataview.count
:
- RowFilter: 获取或设置用于过滤在 DataView 中查看哪些行的表达式。
- Count:获取应用RowFilter和RowStateFilter后DataView中的记录数
dv.Table.Rows[0]["PN"].ToString();
行针对的是基础数据表,而不是数据视图的当前状态。您可以使用 dv.ToTable()
复制过滤后的行
这是一个linqpad演示程序。如果你玩弄它,你就会掌握它的窍门
void Main()
{
DataView dataview = GetTable().DefaultView;
dataview.RowFilter = "Name = 'John'";
DataTable dataTable = dataview.ToTable();
// dataview.Dump();
dataTable.Dump();
var row0 = dataview.Table.Rows[0];
var row1 = dataview.Table.Rows[1];
string.Join("|",row0.ItemArray).Dump();
string.Join("|",row1.ItemArray).Dump();
}
这是辅助方法
static DataTable GetTable()
{
// DataTable with 4 columns
DataTable table = new DataTable("Students");
table.Columns.Add("Id", typeof(int));
table.Columns.Add("Name", typeof(string));
table.Columns.Add("Teacher", typeof(string));
table.Columns.Add("Birthday", typeof(DateTime));
// Add 5 rows
table.Rows.Add(1, "John", "Mr. Charles", DateTime.Parse("2001-01-01"));
table.Rows.Add(2, "Lennard", "Mr. Charles", DateTime.Parse("2002-02-02"));
table.Rows.Add(3, "John", "Lady Graham", DateTime.Parse("2003-03-03"));
table.Rows.Add(4, "Penny", "Mr. Charles", DateTime.Parse("2004-04-04"));
table.Rows.Add(5, "Sheldon", "Sir Winster", DateTime.Parse("2005-05-05"));
return table;
}
你也可以看看 roslynpad
我有以下代码
DataView dv = new DataView(dsModels.Tables[0]);
string strFilter = "MODEL = 'PISTON'";
dv.RowFilter = strFilter;
string strPN = dv.Table.Rows[0]["PN"].ToString();
数据视图 dv
在应用过滤器之前有 35 行的计数。
在我应用过滤器后 dv.count 是 1
但是当我将 strPN 设置为过滤后的 DV 的值时,我得到了第一行的 pn 值。 如果我用 15 设置字符串; 我得到 15 行 pn 值,即使 DV 的计数为 1 ????
如何获取 Model= PISTON
的过滤器行的值摘自dataview.rowfilter
and dataview.count
:
- RowFilter: 获取或设置用于过滤在 DataView 中查看哪些行的表达式。
- Count:获取应用RowFilter和RowStateFilter后DataView中的记录数
dv.Table.Rows[0]["PN"].ToString();
行针对的是基础数据表,而不是数据视图的当前状态。您可以使用 dv.ToTable()
这是一个linqpad演示程序。如果你玩弄它,你就会掌握它的窍门
void Main()
{
DataView dataview = GetTable().DefaultView;
dataview.RowFilter = "Name = 'John'";
DataTable dataTable = dataview.ToTable();
// dataview.Dump();
dataTable.Dump();
var row0 = dataview.Table.Rows[0];
var row1 = dataview.Table.Rows[1];
string.Join("|",row0.ItemArray).Dump();
string.Join("|",row1.ItemArray).Dump();
}
这是辅助方法
static DataTable GetTable()
{
// DataTable with 4 columns
DataTable table = new DataTable("Students");
table.Columns.Add("Id", typeof(int));
table.Columns.Add("Name", typeof(string));
table.Columns.Add("Teacher", typeof(string));
table.Columns.Add("Birthday", typeof(DateTime));
// Add 5 rows
table.Rows.Add(1, "John", "Mr. Charles", DateTime.Parse("2001-01-01"));
table.Rows.Add(2, "Lennard", "Mr. Charles", DateTime.Parse("2002-02-02"));
table.Rows.Add(3, "John", "Lady Graham", DateTime.Parse("2003-03-03"));
table.Rows.Add(4, "Penny", "Mr. Charles", DateTime.Parse("2004-04-04"));
table.Rows.Add(5, "Sheldon", "Sir Winster", DateTime.Parse("2005-05-05"));
return table;
}
你也可以看看 roslynpad