2011-06-21 12 views
61

5つの列と10の行を持つ1つのDataTableがあります。 DataTableに新しい列を1つ追加して、DropDownList値を新しい列に割り当てたいとします。 したがって、DropDownList値を新しい列に10回追加する必要があります。 これを行う方法は? 注:FOR LOOPを使用しない場合。既存のDataTableに値を持つ新しい列を追加する方法?

例:My Existing DataTableは次のようなものです。

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

ここで、このDataTableに「CourseID」という新しい列を1つ追加します。 私はOne DropDownListを持っています。

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

はどのようにこれを行うには、その選択された値が1 だから私の既存の表は以下のようにする必要がありますか?

+0

@CheckRaise:私はオンラインのC#conversion toolを使用したDataTableが複数のレコードが含まれている場合は、ループを完了させるために多くの時間がかかるだろう。 – thevan

答えて

106

Forループがなけれ:

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

これはテストされていません。

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

'' New System.Data.DataColumn'に 'DefaultValue'を使用していますか? – Kiquenet

+0

@Kiquenet:なぜ私はそれを使うべきですか?それは[キースの答え](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; 
        } 
       } 
関連する問題