2013-07-09 107 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」) –

相關問題