Як я можу додати новий стовпець та дані до таблиці даних, яка вже містить дані?


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

2
@Michael: ні, не дуже. Тепер ваш набір даних готовий до цих нових значень. Якщо ви хочете зберегти його, вам потрібно мати якийсь метод, щоб записати його назад (за допомогою SqlDataAdapter або якимось іншим способом). AcceptChanges () нічого не зробить (крім позначення цих змін як "прийнятих" -> їх не буде виявлено для збереження наступного разу, коли ви збережете дані!)
marc_s

13

Хіба це не foreachзамість for !?

//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, не могли б ви детальніше розповісти, як працює це рішення?
Mikael Dúi Bolinder

DataTable dt = sql.ExecuteDataTable ("sp_MyProc"); // dt.Columns.Add ("MyRow", typeof (System.Int32)); dt.Columns ["MyRow"]. Вираз = "'0'";
Akxaya

6

Тільки ви хочете встановити параметр значення за замовчуванням. Це виклик третього методу перевантаження.

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;
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.