我有以下代码
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
的过滤器行的值答案 0 :(得分:0)
取自dataview.rowfilter
和dataview.count
:
第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