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 ); , 这样会报错,
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;
速度重新快了
呵呵
看来数据绑定还是很慢地.....

浙公网安备 33010602011771号