2011-06-21 65 views
61

Tôi có một DataTable với 5 cột và 10 hàng. Bây giờ tôi muốn thêm một cột mới vào DataTable và tôi muốn gán giá trị DropDownList cho cột mới. Vì vậy, giá trị DropDownList sẽ được thêm 10 lần vào cột mới. Cách thực hiện việc này? Lưu ý: Không sử dụng FOR LOOP.Cách thêm Cột Mới có Giá trị vào Bảng Dữ liệu Hiện tại?

Ví dụ: Bảng dữ liệu hiện tại của tôi giống như thế này.

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

Bây giờ tôi muốn thêm một cột mới "CourseID" vào DataTable này. Tôi có một DropDownList. giá trị được chọn là 1. Vì vậy, Bảng hiện có của tôi nên như dưới đây:

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

Làm thế nào để làm điều này?

+0

@CheckRaise: Nó sẽ mất nhiều thời gian hơn để hoàn thành vòng lặp, nếu DataTable chứa nhiều hồ sơ. – thevan

Trả lời

106

Without Đối với loop:

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

Đây là chưa được kiểm tra. Tôi đã sử dụng một trực tuyến 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 Tôi lấy lại. Thiết lập cột với 'DefaultValue' * sau đó * thêm nó vào bộ sưu tập' Columns' có hiệu ứng mong muốn được áp dụng cho tất cả các hàng hiện có. Tuy nhiên, thêm nó vào 'Columns' và sau đó thiết lập' DefaultValue' không tạo ra kết quả tương tự (trong trường hợp này nó chỉ hoạt động trên các hàng mới được thêm vào và không phải các hàng hiện có). –

12

Thêm cột và cập nhật tất cả các hàng trong DataTable, ví dụ:

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

Và sử dụng 'DefaultValue' cho' new System.Data.DataColumn'? – Kiquenet

+0

@Kiquenet: Tại sao tôi nên sử dụng? Nó sẽ không phải là một bản sao cho [Keith của câu trả lời] (http://stackoverflow.com/a/6427038/284240) sau đó? Sử dụng 'DefaultValue' chỉ là một cách tiếp cận khác. Điều này làm việc quá và không kém hiệu quả chỉ là một ít ngắn gọn hơn. Nó cũng không có nhược điểm, bạn không cần phải nhớ nếu bạn có thể thêm cột trước khi bạn áp dụng giá trị mặc định. Ngoài ra, nếu bạn chỉ muốn giá trị này một lần khi bạn thêm cột vào bảng, bạn phải loại bỏ 'DefaultValue' một lần nữa. –

-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; 
        } 
       } 
Các vấn đề liên quan