【问题标题】:Problems removing rows from dataset in C#在 C# 中从数据集中删除行的问题
【发布时间】:2010-09-07 00:14:41
【问题描述】:

我有这种情况:我必须创建一个从另一个数据集中获取所有数据的数据集。在某些情况下,我必须从每个新数据集中删除一些行。当两个 foreach 循环都完成时,两个数据集都是空的,即使只完成第一个,第一个数据集也有一些行。

知道为什么,...或者告诉我哪里有代码错误。

提前谢谢。

//Dataset comes as a parameter.    
DataSet dsFirst = ds;
DataSet dsSecond = ds;

foreach (DataRow dr in dsFirst.Tables[0].Select())
{
    int i = Convert.ToInt32(dr["ROWNUMBER"]);
    //merren vetem veprimet ATM qe jane bere para CoB
    if (i > x && i < y)
        dr.Delete();
    else
        dr["NOVATRANSAKCIJA"] = 0;//eshte derguar njehere, per rrjedhoje nuk do te dergohet sms
}
dsFirst.AcceptChanges();

foreach (DataRow dr1 in dsSecond.Tables[0].Select())
{
    int i = Convert.ToInt32(dr1["ROWNUMBER"]);
    //merren veprimet e sistemit dhe veprimet ATM te bera gjate CoB
    if (i < x || i > y)
        dr1.Delete();
    else
        dr1["NOVATRANSAKCIJA"] = 1;//nuk eshte derguar asnjehere, per rrjedhoje do te dergohet sms

}
dsSecond.AcceptChanges();

【问题讨论】:

    标签: c# dataset rows


    【解决方案1】:

    正如 Marc 已经指出的那样,您在这里使用的是引用类型值,因此您实际上是使用 ds、dsFirst 和 dsSecond 指向同一个数据集。您必须制作数据集的副本才能实现您想要做的事情。

    试试

    dsFirst = ds.Copy(); 
    dsSecond = ds.Copy();
    

    相反,它将克隆结构并复制数据。

    【讨论】:

      【解决方案2】:

      您只有一个数据集(来自您的代码):

      DataSet dsFirst = ds;
      DataSet dsSecond = ds;
      

      复制引用不会克隆数据 - 它只是对 same 数据集的另一个引用。因此,您只是删除了所有数据。您可能会查看 Clone() 方法(但请注意,它复制的是 结构,而不是 data)。

      【讨论】:

        【解决方案3】:

        就像您现在的代码一样,dsFirstdsSecond 不是原始数据集的副本,而是“指向”同一个数据集!

        要复制数据集并随时删除行,我会执行以下操作:

        foreach (DataRow dr in ds.Tables[0].Rows)
        {
            int i = Convert.ToInt32(dr["ROWNUMBER"]);
            if (i <= x || i >= y)
              dsFirst.Tables[0].ImportRow(row);
        }
        

        dsFirst 必须是一个 数据集,其中一个表的列与ds 完全相同。这只会将那些满足删除条件的行导入dsFirst

        您可以使用ds.Clone() 创建包含相应表和列定义的ds 的副本,但我还没有尝试过。使用类型化数据集可以为您节省大量工作,因为您可以根据需要创建任意数量的实例,并且所有表和列都已定义。

        【讨论】:

          猜你喜欢
          • 2012-04-15
          • 2019-10-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-10-15
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多