当我需要向数据源添加过滤器时,我通常会这样做:
var dv= dt.DefaultView;
dv.RowFilter = "id=1";
xxx.DataSource = dv.ToDable();
xxx.DataBind();
但是我试图在没有dataview实例的情况下做到这一点我得到了非常奇怪的结果:
我创建了一个数据表:
DataTable dt = new DataTable("myTable");
dt.Columns.Add("id", typeof (int));
dt.Columns.Add("name", typeof (string));
DataRow row = dt.NewRow();
row["id"] = 1;
row["name"] = "aaa";
dt.Rows.Add(row);
row = dt.NewRow();
row["id"] = 2;
row["name"] = "222";
dt.Rows.Add(row);
然后添加了一个RowFilter
dt.DefaultView.RowFilter = "id=1";
然后我在屏幕上显示了数据表(简单循环)我看到了这个:
所以RowFilter没有任何影响。 (显然是因为我们没有通过DataView实例来实现)。
但是
当我将它绑定到DropDownList 时,它确实考虑了 Rowfilter!
DropDownList ddl = new DropDownList();
ddl.DataSource=dt; //notice I don't use the dataview instance
ddl.DataTextField="name";
ddl.DataValueField="id";
ddl.DataBind();
测试:
ddl.Items.Count
是1
但我找不到该测试的任何文档。
问题:
DataBind()
是否允许我使用dataview实例创建过滤数据源而不使用(例如:设置RowFilter是否足够)?