2016-07-31 31 views
0

更新:尽管我已经得到了所需的结果,但是当第二个函数访问数据表时,值仍然是相同的 它是一个具有两个函数的不同类的顺序程序。首先排序和第二个替换功能。所以它应该排序值和其他函数应该能够检索排序表,但是当它检索数据表时,它会给出未排序的表。更新:结果未转移到原始数据集。使用C#对数据集中的行排序

我已经使用acceptchanges(),但它也给出了相同的结果。

程序试图根据所需字段对表进行排序,结果存储在排序表变量中。我试图将其复制到原始的i-e sourceTables,但它不工作,并且正在添加另一行而不是更新[如下所示]。我试图复制整个表,但它不起作用,通过添加行,它没有给出所需的结果。我使用了不同的方法,但我没有得到所需的结果。

List<DataTable> sourceTables = context.GetDataByTable(sourceTable.StringValue); 
List<DataTable> targetTables = context.GetDataByTable(targetTable.StringValue, sourceTables.Count); 

     string orderDesc= orderField.StringValue + " DESC"; 


     for (int i = 0; i < sourceTables.Count; i++) 
     { 
      DataView dv = sourceTables[i].DefaultView; 

      if (orderDirection.StringValue == OrderDirectionAsc) 
      { 
       // for Sorting in Ascending Order 
       dv.Sort = orderField.StringValue; 
      } 

      else 
      { 
       // for Sorting in Descending Order 
       dv.Sort = orderDesc; 
      } 


      DataTable sortedTable = dv.ToTable(); 

      DataTable dttableNew = sortedTable.Clone(); 
      //sourceTables[i] = sortedTable.Copy(); 
      //targetTables[i] = dv.ToTable(); 
      //targetTables[i] = sortedTable.Copy(); 
      // foreach (DataRow dr in sortedTable.Rows) 
      //// targetTables[i].Rows.Add(dr.ItemArray); 
      //} 
      for (int j = 0; j < sourceTables[i].Rows.Count; j++) 
      { 
       if (sourceTable.GetValue().ToString() == targetTable.GetValue().ToString()) 
       { 
        foreach (DataRow dr in sortedTable.Rows) 
        { 
         targetTables[i].Rows.Add(dr.ItemArray); 

        }     
       else 
       { 
        foreach (DataRow dr in sortedTable.Rows) 
        { 
         targetTables[i].Rows.Add(dr.ItemArray); 

        } 

        // targetTables[i] = sortedTable.Copy(); does not work 

        //foreach (DataRow drtableOld in sortedTable.Rows) 
        //{ 
        // targetTables[i].ImportRow(drtableOld); 
        //} 

,而不是替换第一值是增加更多的行

enter image description here

任何帮助,将不胜感激

+0

为什么你需要复制的排序视图什么吗? – Plutonix

+0

我想排序表。由于排序功能在数据表上不起作用。所以在排序视图后,我试图用视图替换原始数据。 –

+0

如果我使用sourceTables [i] = dv.ToTable()该cahnges只是本地 –

回答

1

如果任何一个有重复的数据或改变只是局部问题并不影响原始数据表。请记住总是使用.ImportRow(dr)函数向表中添加行,并且如果使用Tables [i] .Rows.Add(dr.ItemArray);这些更改只会影响本地表,而不会影响原来的表。使用.clear从原始表中删除旧行。直接对原始函数执行的操作只会影响行。如果在克隆副本上完成更改,将不会影响原始表。
下面是完整的代码

  DataTable sortTable = dv.ToTable(); 

      if (sTable.GetValue().ToString() == tTable.GetValue().ToString()) 
      { 

       sTables[i].Clear(); 

       foreach (DataRow dr in sortTable.Rows) 

       { 
        sTables[i].ImportRow(dr); 
       } 

       sTables[i].AcceptChanges(); 

      }