asp.net中DataTable的ImportRow()与Add()的区别

   今天无意间用到ImportRow()向DataTable中添加记录,代码如下:

    private void AddAppendix(string fileName, string DbName)

{
    DataTable dtAppendix = UpdateAppendix();
    DataRow dr = dtAppendix.NewRow();
    dr["Appendix"] = fileName;
    dr["DbName"] = DbName;
    dtAppendix.ImportRow(dr);      

}

可是执行后发现dtAppendix中的记录并没有增加。可是将上述黄色代码换成dtAppendix.Rows.Add(dr);就可以了。后上网查了下资料弄清楚了原因。下面就说一下这两者的用法与区别及其适用情况。

    1、首先,我们先说下DataTable.NewRow()方法,这个方法可以创建和表具有相同构架的DataRow(而且必须使用这个方法才能创建和原表一样构架的DataRow),并且这个新行是添加在原表上的。但是我发现这个DataTable中并没有这个空行。为什么?原因是这样的:原来Datatable中Rows都一个RowState属性,共有如下几种:

 


Detached

该行已被创建,但不属于任何 DataRowCollectionDataRow 在以下情况下立即处于此状态:创建之后添加到集合中之前;或从集合中移除之后。

Unchanged

该行自上次调用 AcceptChanges 以来尚未更改。

Added

该行已添加到 DataRowCollection 中,AcceptChanges 尚未调用。

Deleted

该行已通过 DataRow Delete 方法被删除。

Modified

该行已被修改,AcceptChanges 尚未调用。

其实NewRow()创建的行其RowState是Detached,显而易见新建的行是不可见。
     2、ImportRow()
     将DateRow复制到DataTable中,保留任何属性设置以及初始值和当前值。但是当DataRow的RowState属性为Detached时无法复制,所以可见上述黄色代码不可行了。网上有人说不能复制是因为新建的行隶属于原表,我认为这是不正确,究其原因很是因为行的属性。其实如果我们把行的属性改变的话,ImportRow()方法还是可行的。
      ImportRow()一般用于将一个表中的数据复制到另一个表中。实例代码如下:
      private DataTable HowToUseImportRow(DataTable dt)
     {
        DataTable dtNew = dt.Clone();
        foreach (DataRow dr in dt.Rows)
        {
            dtNew.ImportRow(dr);
        }
        return dtNew;
     }
      3、Add()
      将制定的DataRow添加到DataRowCollection对象中。实例代码如下:
      private void AddRow(DataTable table)
     {
            DataRowCollection rowCollection = table.Rows;
            // Instantiate a new row using the NewRow method.

            DataRow newRow = table.NewRow();
           // Insert code to fill the row with values.

           // Add the row to the DataRowCollection.
          table.Rows.Add(newRow);
      }
      添加完后DataRow的RowState属性变为Added。所以把上述黄色代码改为dtAppendix.Rows.Add(dr)即可。      
     好,今天先写到这里!上述内容如有错误,麻烦纠正,谢谢!
 
     
    
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值