2011-06-21 42 views
61

我有一個DataTable 5列和10行。 現在我想添加一個新列到DataTable中,我想將DropDownList值分配給新列。 因此,DropDownList值應添加10次到新列。 如何做到這一點? 注意:不使用FOR LOOP。如何向現有DataTable添加具有值的新列?

例如:My Existing DataTable就是這樣。

ID    Value 
    -----   ------- 
    1    100 
    2    150 

現在我想添加一個新列「CourseID」到這個DataTable。 我有一個DropDownList。它選擇的值是1 所以我現有的表應該有如下:

ID    Value   CourseID 
    -----   ------  ---------- 
    1    100    1 
    2    150    1 

如何做到這一點?

+0

@CheckRaise:這將需要更多的時間來完成循環,如果DataTable包含更多的記錄。 – thevan

回答

106

沒有For循環:

Dim newColumn As New Data.DataColumn("Foo", GetType(System.String))  
newColumn.DefaultValue = "Your DropDownList value" 
table.Columns.Add(newColumn) 

這是未經測試。我用了一個網上的C#conversion tool

System.Data.DataColumn newColumn = new System.Data.DataColumn("Foo", typeof(System.String)); 
newColumn.DefaultValue = "Your DropDownList value"; 
table.Columns.Add(newColumn); 
+8

+1我回來了。使用'DefaultValue' *設置列,然後將其添加到'Columns'集合,具有應用於所有現有行的預期效果。但是,將它添加到'Columns'然後設置'DefaultValue'不會產生相同的結果(在這種情況下,它只適用於新添加的行,而不適用於現有的行)。 –

12

添加列和更新所有列在DataTable,例如:

DataTable tbl = new DataTable(); 
tbl.Columns.Add(new DataColumn("ID", typeof(Int32))); 
tbl.Columns.Add(new DataColumn("Name", typeof(string))); 
for (Int32 i = 1; i <= 10; i++) { 
    DataRow row = tbl.NewRow(); 
    row["ID"] = i; 
    row["Name"] = i + ". row"; 
    tbl.Rows.Add(row); 
} 
DataColumn newCol = new DataColumn("NewColumn", typeof(string)); 
newCol.AllowDBNull = true; 
tbl.Columns.Add(newCol); 
foreach (DataRow row in tbl.Rows) { 
    row["NewColumn"] = "You DropDownList value"; 
} 
//if you don't want to allow null-values' 
newCol.AllowDBNull = false; 
+0

並使用'DefaultValue'爲'新的System.Data.DataColumn'? – Kiquenet

+0

@Kiquenet:我爲什麼要用它?那麼它會不會是[Keith的回答](http://stackoverflow.com/a/6427038/284240)的重複?使用'DefaultValue'只是一種不同的方法。這一個也可以工作,效率不低,簡單一點。它也沒有缺點,你不需要記住你是否可以在應用默認值之前添加列。另外,如果在將列添加到表時只需要此值,則必須再次刪除'DefaultValue'。 –

-1
//Data Table 

protected DataTable tblDynamic 
     { 
      get 
      { 
       return (DataTable)ViewState["tblDynamic"]; 
      } 
      set 
      { 
       ViewState["tblDynamic"] = value; 
      } 
     } 
//DynamicReport_GetUserType() function for getting data from DB 


System.Data.DataSet ds = manage.DynamicReport_GetUserType(); 
       tblDynamic = ds.Tables[13]; 

//Add Column as "TypeName" 

       tblDynamic.Columns.Add(new DataColumn("TypeName", typeof(string))); 

//fill column data against ds.Tables[13] 


       for (int i = 0; i < tblDynamic.Rows.Count; i++) 
       { 

        if (tblDynamic.Rows[i]["Type"].ToString()=="A") 
        { 
         tblDynamic.Rows[i]["TypeName"] = "Apple"; 
        } 
        if (tblDynamic.Rows[i]["Type"].ToString() == "B") 
        { 
         tblDynamic.Rows[i]["TypeName"] = "Ball"; 
        } 
        if (tblDynamic.Rows[i]["Type"].ToString() == "C") 
        { 
         tblDynamic.Rows[i]["TypeName"] = "Cat"; 
        } 
        if (tblDynamic.Rows[i]["Type"].ToString() == "D") 
        { 
         tblDynamic.Rows[i]["TypeName"] = "Dog; 
        } 
       } 
相關問題