当我需要向数据源添加过滤器时,我通常会这样做:
var dv= dt.DefaultView;
dv.RowFilter = "id=1";
xxx.DataSource = dv.ToDable();
xxx.DataBind();
但是我尝试在没有数据视图实例的情况下做到这一点而且我得到了非常奇怪的结果:
我创建了一个数据表:
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()
允许我在不使用数据视图实例的情况下创建过滤数据源(例如:设置 RowFilter 是否足够)?