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

这样就完成了。

你可能感兴趣的:(datagrid)