2012-01-23 23 views
0

C#コードを使用して列を動的に作成しようとしていますが、Textboxを使用して列を作成する必要があります。ここに私のコードは次のとおりです。Gridviewコードを使用して動的に列を追加

protected void loadTable() 
{ 
    gv_productDesc.Columns.Clear(); 
    SqlConnection con = new SqlConnection(); 
    con.ConnectionString = ConfigurationManager.ConnectionStrings["UserCS"].ConnectionString; 

    string sql = "SELECT * FROM ItemTable WHERE [email protected]"; 
    SqlCommand cmd = new SqlCommand(sql, con); 

    cmd.Parameters.AddWithValue("@pcategoryId", ddl_category.SelectedValue); 

    SqlDataReader dr; 
    DataTable dt = new DataTable(); 

    try 
    { 
     con.Open(); 
     dr = cmd.ExecuteReader(); 
     dt.Load(dr); 

     /*BoundField itemname = new BoundField(); 
     itemname.HeaderText = "Item Name"; 
     itemname.HeaderStyle.CssClass = "gridPadding"; 
     itemname.DataField = "itemName"; 
     itemname.ItemStyle.CssClass = "gridPadding"; 
     itemname.ItemStyle.Font.Bold = true; 
     itemname.ItemStyle.Width = 225; 
     gv_productDesc.Columns.Add(itemname);*/ 

     ButtonField btnfield = new ButtonField(); 
     btnfield.HeaderText = "Item Name"; 
     btnfield.HeaderStyle.CssClass = "gridPadding"; 
     btnfield.ButtonType = ButtonType.Link; 
     btnfield.DataTextField = "itemName"; 
     btnfield.CommandName = "lala"; 
     btnfield.ItemStyle.CssClass = "linkcss"; 
     btnfield.ItemStyle.Width = 225; 
     gv_productDesc.Columns.Add(btnfield); 

     BoundField itemprice = new BoundField(); 
     itemprice.HeaderText = "Item Price ($)"; 
     itemprice.HeaderStyle.CssClass = "gridPadding"; 
     itemprice.DataField = "unitPrice"; 
     itemprice.ItemStyle.CssClass = "gridPadding"; 
     itemprice.ItemStyle.Font.Bold = true; 
     itemprice.ItemStyle.Width = 100; 
     gv_productDesc.Columns.Add(itemprice); 

     BoundField itemdescHidden = new BoundField(); 
     itemdescHidden.HeaderText = "Item Description"; 
     itemdescHidden.DataField = "description"; 
     itemdescHidden.HtmlEncode = false; 
     itemdescHidden.ItemStyle.Width = 0; 
     gv_productDesc.Columns.Add(itemdescHidden); 

     BoundField itemdesc = new BoundField(); 
     itemdesc.HeaderText = "Item Description"; 
     itemdesc.HeaderStyle.CssClass = "gridPadding"; 
     itemdesc.ItemStyle.CssClass = "gridPadding"; 
     itemdescHidden.DataField = "description"; 
     itemdesc.HtmlEncode = false; 
     itemdesc.ItemStyle.HorizontalAlign = HorizontalAlign.Left; 
     itemdesc.ItemStyle.Width = 320; 
     gv_productDesc.Columns.Add(itemdesc); 

     ImageField itemimage = new ImageField(); 
     itemimage.HeaderText = "Item Image"; 
     itemimage.HeaderStyle.CssClass = "gridPadding"; 
     itemimage.DataImageUrlField = "image"; 
     itemimage.ItemStyle.CssClass = "gridPadding"; 
     itemimage.ItemStyle.Width = 225; 
     itemimage.ControlStyle.Width = 225; 
     gv_productDesc.Columns.Add(itemimage); 



     gv_productDesc.DataSource = dt; 
     gv_productDesc.DataBind(); 
     gv_productDesc.Columns[2].Visible = false; 
    } 
    catch (Exception ex) 
    { 
     lb_msg2.Text = "Error Encountered : " + ex.Message; 
    } 
    finally 
    { 
     con.Close(); 
     con.Dispose(); 
     cmd.Dispose(); 
    } 
} 

は私がメインページ(example.aspx)にGridViewコントロールに列を追加しようとしましたが、私はGridViewコントロールに値をバインドする場合、その列は消失しました。

答えて

0

GridViewへのデータバインディングは、データソースが返す列に基づいて常にGridViewを再描画します。あなたのケースでは、あなたのデータソースの一部として列を追加する必要がある、またはAutoGenerateColumns="False"

UPDATE

置き設定のいずれかあなたのダイナミックコントロール GridViewコントロールにデータテーブルをバインドするコードAFTER上記の私の元のコメントに従って。

関連する問題