C# DataRow、DataTable、DataSet报错:System.ArgumentException:“该行已经属于另一个表。”

文章讲述了在C#开发中遇到的错误,即试图将一个DataSet表中的已引用行复制到另一张表时出现异常。解决方案是使用`ItemArray`属性来复制一行的所有值,以避免引用冲突。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        我在开发一个C#项目中,有个需求就是将一个表中的一行数据,整条赋值到另一个表中,这时,会报一个System.ArgumentException:“该行已经属于另一个表。”的错误。从其他地方找到了个方法,就是在赋值的那条数据后,加上个方法:ItemArray。

        ItemArray:通过数组获取或设置此行的所有值;

具体问题代码展示

// 获取数据
Hashtable ht = new Hashtable(7);
DataSet ds = PlateManager.GetInstance().GetList(ht);

// 空表格,符合条件则存入该表格
Hashtable ht1 = new Hashtable(7);
ht1.Add("DesignNo", -1);
DataSet ds1 = PlateManager.GetInstance().GetList(ht1).

// 判断条件
if (radlCountdown.Text == "全部")
{
    ds1 = ds;
}
else 
{
    if (radlCountdown.Text == "已交版")
    {
         for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
         {
              if (ds.Tables[0].Rows[i]["Countdown"].ToString() == "已交版")
              {
                   // 此行将报错:System.ArgumentException:“该行已经属于另一个表。”
                   ds1.Tables[0].Rows.Add(ds.Tables[0].Rows[i]);
              }
         }
    }
}

解决方法展示

// 获取数据
Hashtable ht = new Hashtable(7);
DataSet ds = PlateManager.GetInstance().GetList(ht);

// 空表格,符合条件则存入该表格
Hashtable ht1 = new Hashtable(7);
ht1.Add("DesignNo", -1);
DataSet ds1 = PlateManager.GetInstance().GetList(ht1).

// 判断条件
if (radlCountdown.Text == "全部")
{
    ds1 = ds;
}
else 
{
    if (radlCountdown.Text == "已交版")
    {
         for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
         {
              if (ds.Tables[0].Rows[i]["Countdown"].ToString() == "已交版")
              {
                   // 解决方法:加上:.ItemArray
                   ds1.Tables[0].Rows.Add(ds.Tables[0].Rows[i].ItemArray);
              }
         }
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值