2013-07-09 68 views
0

我需要在两个数据表之间实现列移位功能。假设我有DataTable 1中的列{A,B,C}和DataTable 2中的{A}。将完整列从一个数据表移动到其他C#

如果我想将列{B,C}移动到DataTable 2,我该怎么做?两个表中的数据都应该类似。

如果数据表不是正确的选择,那么请帮我对我们如何才能做到这一点..

可以这样用列表来完成> - 嵌套列表?尝试下面的代码,但认为合并不是正确的选择。

private void move(DataTable source, DataTable dest, string colname) 
    { 
     var result = source.AsEnumerable().Select(row => row.Field<string>(colname)); 
     dest.Columns.Add(colname); 
     DataTable dt = source.DefaultView.ToTable(false, colname); 

     dest.Merge(dt);   

    } 

我是初学者,所以请建议是否有其他方式,我们可以根据用户选择移动列。

+0

这看起来像一个复制列和复制数据的复杂工作。你有什么尝试?你在哪里被困住了? –

+0

我尝试了下面 空隙ShiftColumn(数据表源,数据表DEST,串colname的) { 变种结果= source.AsEnumerable()选择(行=> row.Field (colname的)); dest.Columns.Add(colname); DataTable dt = source.DefaultView.ToTable(false,colname); pd.Merge(dt); } } –

+0

我试着获取用户选择的列名,并使用linq查询来获取关于该列的数据,然后与目标表合并。猜猜合并在这里不是正确的选择。 。 空隙ShiftColumn(数据表源,数据表DEST,串colname的) { 变种结果= source.AsEnumerable()选择(行=> row.Field (colname的)); dest.Columns.Add(colname); DataTable dt = source.DefaultView.ToTable(false,colname); dest.Merge(dt); } } 我是初学者,所以请提出其他建议。 –

回答

0

有时还给我做了这一点。我不得不手动编写数据表副本的代码。下面的方法完成了将源表中缺失的列复制到目标表的工作。它返回被复制的列名称的集合。 第二个函数将数据从源列复制到目标列。它将主键列名称作为输入,并将需要复制数据的列名称列表。

public List<string> CopyDistinctColumns(DataTable source, DataTable target) 
{ 
    var copiedColumn = new List<string>(); 
    for(var x = 0; x < source.Columns.Count; x++) 
    { 
     var column = source.Columns[x]; 
     if(!target.Columns.Contains(column.ColumnName)) 
     { 
      var newCol = new DataColumn 
      { 
       ColumnName = column.ColumnName, 
       DataType = column.DataType, 
       Caption = column.Caption, 
       DefaultValue = column.DefaultValue, 
       MaxLength = column.MaxLength, 
      }; 
      copiedColumn.Add(column.ColumnName); 
      target.Columns.Add(newCol); 
     } 
    } 
    return copiedColumn; 
} 

public void CopyData(DataTable source, DataTable target, string primaryKeyColumnName, List<string> copiedColumns) 
{ 
    for (var i = 0; i < source.Rows.Count; i++) 
    { 
     var row = source.Rows[i]; 
     var primaryKeyValue = row[primaryKeyColumnName]; 
     for (var j = 0; j < target.Rows.Count; j++) 
     { 
      var trow = target.Rows[j]; 
      if (trow[primaryKeyColumnName].Equals(primaryKeyValue)) 
      { 
       foreach (var col in copiedColumns) 
       { 
        trow[col] = row[col]; 
       } 
       break; 
      } 
     } 
    } 
} 
+0

谢谢;我从代码中得到了很多线索。这真的帮助了我。 –

0

检查有数据表副本选项, 像 DataTable的DT =新的DataTable() dt.copy 或 dt.clone

+0

试过了;但是我们可以只复制特定的列吗?我的要求是用户可以移动,或者我们可以将列和列数据抓到列表中,并创建列的嵌套列表,然后绑定到网格?那会很好吗? –

+0

Datacolumn dc = dt.column [3];现在添加如dt2.columns.add(dc) –

+0

如果上述方式不起作用,您可以轻松地删除不需要的列。 dt.columns。Romve(“columnname”) –

相关问题