DataRow数组转换成DataTable

将DataRow[] 转换成 DataTable.

假设,DataTable objDT = GetDataTable();

          // objDT 已经存在数据行和列了,要从这个DataTable中筛选部分数据.再把这部分数据

          // 添加到新的DataTable中。假设有一个列叫flag要筛选flag=0的数据.

DataRow[] objDRArray = objDT.Select(" flag = 0 ");

          DataTable objNewDT = new GetDataTable(); //注意要有数据结构

          // 遍历 objDRArray 添加到新的 DataTable .

          foreach(DataRow tempObjRow in objDRArray )

         {

objNewDT.ImportRow(tempObjRow );

         }

objDrArray=null; //清空DataRow

          // 这样就可以了,即可将筛选的数据填充到新的objNewDT中

          // 注意在foreach里面不能写成 objNewDT.Rows.Add(tempObjRow ); , 这样会报错,

          // "这个行在clip_image001其它的行已经存在了"

DataSet   ds   =   opconn(); 
     ataView   dv   =   new   DataView(ds.Tables[0]);//创建数据视图
     if   (textBox1.Text   !=   " ") 
     { 
     dv.RowFilter   =   "name   = ' "   +   textBox1.Text   +   " ' ";//数据视图筛选数据
     dataGridView1.AutoGenerateColumns   =   true;//网格控件是否自动创建
     dataGridView1.DataSource   =   dv;//绑定网格控件的数据源,这里使用DataRow   r记录数组作为数据源
     } 
     else 
     { 
     dv.Sort   =   "ge   desc ";//数据视图排序,可有多个列,默认为升序,降序加desc 
     dataGridView1.AutoGenerateColumns   =   true;//网格控件是否自动创建
     dataGridView1.DataSource   =   dv;//绑定网格控件的数据源,这里使用dataset作为数据源
     }

DataRow[]转到DataTable

DataRow[]转换成DataTable的方法:
DataTable dt=new DataTable();
DataRow[] dr=new DataRow();
dr=GetChildRows(...);
for(int i=0;i<dr.Length;i++)
{
dt.ImportRow(dr[i]);
}
dg.DataSource=dt;
dg.DataBind();

向一个DataTable批量添加DataRow时有两种办法:
DataTable dt;
DataTable newdt;
for(int i = 0;i<dt.Rows.Count;i++)
{
    newdt.Rows.Add(dt.Rows[i].ItemArray);
}

for(int i = 0;i<dt.Rows.Count;i++)
    {
     newdt.ImportRow(dt.Rows[i]);
    }
两种方式速度很快,200条记录,50ms左右。
但是今天,在实际开发中发现时间在5S,郁闷呀。
检查代码,发现添加记录的DataTable一直绑定在一个DataGrid,
改了代码:
this.DataGrid1.DataSource = null;
for(int i = 0;i<dt.Rows.Count;i++)
    {
     newdt.ImportRow(dt.Rows[i]);
    }
this.DataGrid1.DataSource = newdt;
速度重新快了
呵呵
看来数据绑定还是很慢地.....

posted @ 2010-01-11 16:37  Lester Duo  Views(8169)  Comments(1)    收藏  举报