2008-12-09 24 views
20

我想用C#將一列插入到現有的DataSet中。如何將列插入兩個現有列之間的數據集中?

正如我數據集定義爲一個例子如下:

DataSet ds = new DataSet(); 
ds.Tables.Add(new DataTable()); 
ds.Tables[0].Columns.Add("column_1", typeof(string)); 
ds.Tables[0].Columns.Add("column_2", typeof(int)); 
ds.Tables[0].Columns.Add("column_4", typeof(string)); 

稍後在我的代碼我想列2和列之間插入一列4.

數據集具有用於添加方法一列,但我似乎無法找到插入其中的最佳方式。

我想寫點東西像下面...

...Columns.InsertAfter("column_2", "column_3", typeof(string)) 

最終的結果應該是有一個表有以下的列數據集: COLUMN_1 COLUMN_2 column_3 column_4

而不是: column_1 column_2 column_4 column_3這是什麼加法方法給我

肯定必須有這樣做的方式。

編輯 ...只是想澄清一下,我基於以下一些意見的數據集做:

我從一個存儲 過程得到一個數據集。然後,我必須將 附加列添加到數據集 ,然後將其轉換爲Excel 文檔。我無法控制 由存儲過程返回的數據 ,所以我必須在 之後添加列。

+0

只是出於好奇,爲什麼要做這個?數據庫代碼依賴於存儲列的順序通常不是一個好主意。 – Ferruccio 2008-12-09 02:05:03

回答

40

您可以使用DataColumn.SetOrdinal()方法達到此目的。

DataSet ds = new DataSet(); 
ds.Tables.Add(new DataTable()); 
ds.Tables[0].Columns.Add("column_1", typeof(string)); 
ds.Tables[0].Columns.Add("column_2", typeof(int)); 
ds.Tables[0].Columns.Add("column_4", typeof(string)); 
ds.Tables[0].Columns.Add("column_3", typeof(string)); 
//set column 3 to be before column 4 
ds.Tables[0].Columns[3].SetOrdinal(2); 
-1

將前兩列複製到一個新數據集中,然後添加第三列並添加其餘列。

如果需要,可以將其包裝在InsertAfter函數中。

8

我用你的建議創建DataSet的DataColumnCollection一種推廣方法:

public static void InsertAfter(this DataColumnCollection columns, 
           DataColumn currentColumn, DataColumn newColumn) 
{ 
    if (!columns.Contains(currentColumn.ColumnName)) 
     throw new ArgumentException(/** snip **/); 

    columns.Add(newColumn); 
    //add the new column after the current one 
    columns[newColumn.ColumnName].SetOrdinal(currentColumn.Ordinal + 1); 
} 

我現在可以這樣寫:

dt = ds.Tables[0]; 
dt.Columns.InsertAfter(dt.Columns["column_2"], new DataColumn("column_3")); 
0

基於https://stackoverflow.com/a/17372008/492336,我用SetOrdinal用的IndexOf( )在foo之前插入bar

table.Columns.Add("bar").SetOrdinal(table.Columns.IndexOf("foo")); 

foo後插入它只是添加+1

table.Columns.Add("bar").SetOrdinal(table.Columns.IndexOf("foo")+1); 
相關問題