DataGrid和GridView绑定筛选后的数据
以前用DataTable.Select来筛选数据,返回DataRow[]数组,但是不能直接绑定到表格中。总结了网上的方法:
第一种,真的要按原来思路去实现,
DataRow[] rows=dt.Select( "CategoryID=16 ");
DataTable dt2=dt.Copy(); //我印象中有Clone方法可以直接复制架构和数据结构但不复制数据的,不要用copy方法。
dt2.Rows.Clear();
foreach(DataRow row2 in rows)
{
object[] row3=row2.ItemArray;
dt2.Rows.Add(row3);
}
this.DataGrid1.DataSource=dt2.DefaultView;
this.DataGrid1.DataBind();
另外一种方法,我觉得更佳,达到目的。
不建议DataRow数组绑定DataGrid
同样的效果,建议用DataView.RowFilter实现
DataTable dt = ..........;
DataView dv = dt.Copy().DefaultView;
dv.RowFilter = "[field1]>1";
DataGrid1.DataSource = dv;
.............
另外记录以下(from http://topic.csdn.net/u/20070915/23/a0f45583-387a-4a4d-80c5-b0899b59c636.html ):
采用以下办法:
DataRow[] drArr = dt.Select( "C1=’abc’ ");//查询
问题来了,如果要把DataRow赋值给新的DataTable,怎么赋值呢?你可能会想到:
DataTable dtNew = dt.Clone();
for (int i = 0; i < drArr.Length; i++)
{
dtNew.Rows.Add(drArr[i]);
}
但这样程序就会出错,说该DataRow是属于其他DataTable的,那要怎么做呢?很简单,这样就可以解决了:
DataTable dtNew = dt.Clone();
for (int i = 0; i < drArr.Length; i++)
{
dtNew.ImportRow(drArr[i]);
}
这样就完成了。
浙公网安备 33010602011771号