DataTable.ImportRow()与DataTable.Rows.Add()的区别

今天在写一个程序是遇到DataTable中添加行添加不了的问题,代码以下:ide

        DataTable dt = dataGridView1.DataSource as DataTable;
            DataTable dtTemp = stfBLL.GetDataByBoxID(boxId);
            DataRow dr = dt.NewRow();
            dr["BoxID"] = dtTemp.Rows[0]["PicID"].ToString();
            dr["Item"] = dtTemp.Rows[0]["Item"].ToString();
            dr["LotNumber"] = dtTemp.Rows[0]["KS_LOT"].ToString();
            dr["STK"] = stk;
            dr["Bin"] = bin;
            dr["Qty"] = Convert.ToSingle(qty);
            dt.ImportRow(dr);
            dataGridView1.DataSource = dt;

试了几回都没把数据添加上去,因而找度娘求助,缘由是DataTable的ImportRow()和Rows.Add()的区别;spa

一、首先,咱们先说下DataTable.NewRow()方法,这个方法能够建立和表具备相同构架的DataRow(并且必须使用这个方法才能建立和原表同样构架的DataRow),而且这个新行是添加在原表上的。可是我发现这个DataTable中并无这个空行。为何?缘由是这样的:原来Datatable中Rows都一个RowState属性,共有以下几种:
1,Detached 该行已被建立,但不属于任何 DataRowCollection。DataRow 在如下状况下当即处于此状态:建立以后添加到集合中以前;或从集合中移除以后。
2,Unchanged 该行自上次调用AcceptChanges以来还没有更改。
3,Added 该行已添加到DataRowCollection中,AcceptChanges还没有调用。
4,Deleted 该行已经过DataRow的Delete方法被删除。
5,Modified 该行已被修改,AcceptChanges还没有调用。code

其实NewRow()建立的行其RowState是Detached,显而易见新建的行是不可见。对象

二、ImportRow()
将DateRow复制到DataTable中,保留任何属性设置以及初始值和当前值。可是当DataRow的RowState属性为Detached时没法复制,因此可见上述黄色代码不可行了。网上有人说不能复制是由于新建的行隶属于原表,我认为这是不正确,究其缘由非常由于行的属性。其实若是咱们把行的属性改变的话,ImportRow()方法仍是可行的。
ImportRow()通常用于将一个表中的数据复制到另外一个表中。实例代码以下:blog

1 private DataTable HowToUseImportRow(DataTable dt)
2 {
3 DataTable dtNew = dt.Clone();
4 foreach (DataRow dr in dt.Rows)
5 {
6 dtNew.ImportRow(dr);
7 }
8 return dtNew;
9 }
View Code

三、Add()
将制定的DataRow添加到DataRowCollection对象中。实例代码以下:qt

 1 private void AddRow(DataTable table)
 2 {
 3 DataRowCollection rowCollection = table.Rows;
 4 // Instantiate a new row using the NewRow method.
 5 
 6 DataRow newRow = table.NewRow();
 7 // Insert code to fill the row with values.
 8 
 9 // Add the row to the DataRowCollection.
10 table.Rows.Add(newRow);
11 }
View Code

 

添加完后DataRow的RowState属性变为Added。因此把上述的dtAppendix.ImportRow(dr)改成dtAppendix.Rows.Add(dr)便可。it

相关文章
相关标签/搜索