数据视图过滤器无法正常工作

时间:2017-08-16 15:10:06

标签: c# dataview

我有以下代码

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

的过滤器行的值

1 个答案:

答案 0 :(得分:0)

取自dataview.rowfilterdataview.count

  • RowFilter :获取或设置用于过滤在DataView中查看哪些行的表达式。
  • 计数:获取应用RowFilter和RowStateFilter后DataView中的记录数

dv.Table.Rows[0]["PN"].ToString();行定位于基础数据表,而不是数据视图的当前状态。您可以使用dv.ToTable()

复制已过滤的行

这是一个演示程序。如果你玩它就会得到它的支持

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;
}

您也可以查看