2012-05-10 25 views
2

我想通過代碼在GridView中添加像GridView中的控件。如何在RunTime中的GridView中添加動態Texbox?

在我的項目中,我有一個網格,我無法確定有多少行和列。所以我只是給它數據源。這工作正常。

GridView G = new GridView(); 
G.DataSourse = dt; 
G.DataBind(); 

現在我想要做這樣的事情,在Gridview所有的控制都是Textbox控制,這樣我可以在文本框寫。

TextBox t= new TextBox(); 
G.Contorls.Add(t); 

這將引發異常......

也有人對此有什麼想法???

在此先感謝..

問候 阿米特·維亞斯

+0

@阿密特是它拋出什麼異常,你可以請張貼以及在您要添加文本到GridView控件集合 – Devjosh

+0

@Devjosh異常對象裁判未設置爲實例什麼事件的GridView的一個東西。 –

+0

在任何時候我想添加控件之前綁定datatable到網格... –

回答

2

爲什麼不ItemTemplate中

<asp:GridView ID="GrdDynamic" runat="server"> 
     <Columns> 
      <asp:TemplateField> 
       <ItemTemplate> 
        <asp:TextBox runat="server" ID="Name" Text='<%#Eval("Name") %>'></asp:TextBox> 
       </ItemTemplate> 
      </asp:TemplateField> 
     </Columns> 
    </asp:GridView> 

編輯

這裏做它在設計時是一個有趣的帖子_或代碼在dynamically adding template columns

+0

我無法在設計時間,因爲我的列和行不固定..... –

+2

@ amitvyas100688檢查我編輯的帖子。我已經分享了一個鏈接 –

0

請檢查該http://www.devasp.net/net/articles/display/708.html鏈接,並使用下面的代碼:

DropDownList ddl = new DropDownList(); 

     ddl.Visible = true; 

     ddl.ID = "ddl1"; 

     ddl.Items.Add("Item1"); 

     TableCell cell = new TableCell();  

     gv.Rows[0].Cells.Add(cell); 

     gv.Rows[0].Cells[0].Controls.Add(ddl); 
0

如果你正在尋找一種方法來在現有的GridView動態添加文本框,然後使用GridView控件的RowDataBound事件將是最好的解決方案。

在ItemTemplate字段中添加一個PlaceHolder控件。

<asp:GridView ID="GrdDynamic" runat="server" OnRowDataBound="GridView_RowDataBound"> 
    <Columns> 
     <asp:TemplateField> 
      <ItemTemplate> 
       <asp:PlaceHolder runat='server' ID="PlaceHolder1"></asp:PlaceHolder> 
      </ItemTemplate> 
     </asp:TemplateField> 
    </Columns> 
</asp:GridView> 

public void GridView_RowDataBound(Object sender, GridViewRowEventArgs e) 
{ 
    //find placeholder control 
    PlaceHolder placeHolder = e.Row.FindControl("PlaceHolder1") as PlaceHolder; 

    TextBox TextBox1 = new TextBox(); 
    placeHolder.Controls.Add(TextBox1);  
} 
+0

我很欣賞你的代碼邏輯。它太容易了,但只有一列,但在我的情況下,沒有固定的列。我不能決定列的數量..現在我怎麼能做到這一點? –