2011-06-21 19 views
61

Mam jedną tabelę danych z 5 kolumnami i 10 wierszami. Teraz chcę dodać jedną nową kolumnę do DataTable i chcę przypisać wartość DropDownList do nowej kolumny. Tak więc wartość DropDownList powinna zostać dodana 10 razy do nowej kolumny. Jak to zrobić? Uwaga: Bez użycia FOR LOOP.Jak dodać nową kolumnę z wartością do istniejącej tabeli danych?

Na przykład: Moja istniejąca tabela Data jest taka.

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

Teraz chcę dodać do tej DataTable jedną nową kolumnę "CourseID". Mam jedną DropDownList. Jej wybrana wartość to 1. więc mój istniejącej tabeli powinny być jak poniżej:

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

Jak to zrobić?

+0

@CheckRaise: zajęłoby więcej czasu, aby zakończyć pętlę, jeśli DataTable zawiera więcej rekordów. – thevan

Odpowiedz

106

Bez pętli For:

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

to przetestowane. Użyłem online 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 Ja to odbieram. Ustawienie kolumny z wartością "DefaultValue" *, a następnie * dodanie jej do kolekcji 'Kolumny', daje pożądany efekt zastosowania do wszystkich istniejących wierszy. Jednak dodanie go do 'Columns', a następnie ustawienie' DefaultValue' nie daje takiego samego wyniku (w takim przypadku działa tylko na nowo dodanych wierszach i nie istniejących). –

12

Dodać kolumnę i aktualizować wszystkie wiersze z DataTable, np

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

I używając 'DefaultValue' dla' new System.Data.DataColumn'? – Kiquenet

+0

@Kiquenet: Dlaczego powinienem tego używać? Czy nie byłoby to duplikatem [odpowiedzi Keitha] (http://stackoverflow.com/a/6427038/284240)? Używanie 'DefaultValue' to tylko inne podejście. Ta też działa i nie jest mniej wydajna, tylko trochę mniej zwięzła. Nie ma również żadnych wad, nie musisz pamiętać, czy możesz dodać kolumnę przed zastosowaniem wartości domyślnej. Ponadto, jeśli chcesz tylko tę wartość raz, gdy dodasz kolumnę do tabeli, musisz ponownie usunąć '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; 
        } 
       } 
Powiązane problemy