すでにデータが含まれているデータテーブルに新しい列とデータを追加するにはどうすればよいですか?


81

すでにデータが含まれDataColumnているDataTableオブジェクトに新しいものを追加するにはどうすればよいですか?

擬似コード

//call SQL helper class to get initial data 
DataTable dt = sql.ExecuteDataTable("sp_MyProc");

dt.Columns.Add("NewColumn", type(System.Int32));

foreach(DataRow row in dr.Rows)
{
    //need to set value to NewColumn column
}

回答:


126

あなたのコードを続けてください-あなたは正しい軌道に乗っています:

//call SQL helper class to get initial data 
DataTable dt = sql.ExecuteDataTable("sp_MyProc");

dt.Columns.Add("NewColumn", typeof(System.Int32));

foreach(DataRow row in dt.Rows)
{
    //need to set value to NewColumn column
    row["NewColumn"] = 0;   // or set it to some other value
}

// possibly save your Dataset here, after setting all the new values

dt.AcceptChanges()新しい列と値を追加した後、電話をかける必要がありましたか?
Michael Kniskern 2010

2
@マイケル:いいえ、そうではありません。これで、データセットにこれらの新しい値が準備されました。保存する場合は、(SqlDataAdapterまたはその他の方法で)書き戻すための何らかのメソッドが必要です。AcceptChanges()は何もしません(これらの変更を「承認済み」としてマークすることを除いて->次にデータを保存するときに保存するために検出されません!)
marc_s 2010

13

foreachforの代わりにすべきではありません!?

//call SQL helper class to get initial data  
DataTable dt = sql.ExecuteDataTable("sp_MyProc"); 

dt.Columns.Add("MyRow", **typeof**(System.Int32)); 

foreach(DataRow dr in dt.Rows) 
{ 
    //need to set value to MyRow column 
    dr["MyRow"] = 0;   // or set it to some other value 
} 

7

For / ForEachループを減らすための代替ソリューションを次に示します。これにより、ループ時間が短縮され、すばやく更新されます:)

 dt.Columns.Add("MyRow", typeof(System.Int32));
 dt.Columns["MyRow"].Expression = "'0'";

2
@Akxaya、そのソリューションがどのように機能するかについて詳しく説明していただけませんか?
ミカエルDUIブリンダー

DataTable dt = sql.ExecuteDataTable( "sp_MyProc"); // dt.Columns.Add( "MyRow"、typeof(System.Int32)); dt.Columns ["MyRow"]。Expression = "'0'";
Akxaya

6

デフォルト値パラメータを設定したいのはあなただけです。これは、3番目のオーバーロードメソッドを呼び出します。

dt.Columns.Add("MyRow", type(System.Int32),0);

2

これを試して

> dt.columns.Add("ColumnName", typeof(Give the type you want));
> dt.Rows[give the row no like  or  or any no]["Column name in which you want to add data"] = Value;
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.