2

我想从代码中动态添加控件,如 GridView 中的文本框。

在我的项目中,我有一个网格,我无法确定那里有多少行和列。所以我只是给它DataSource。这工作正常。

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

现在我想做这样的事情,在Gridview所有控件中都是Textbox控制的,这样我就可以在那个文本框中写了。

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

这将引发异常...

有人对此有任何想法吗???

提前致谢..

问候阿米特维亚斯

4

3 回答 3

1

为什么不使用 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>

编辑

这是一篇关于动态添加模板列的有趣 CodeProject 帖子

于 2012-05-10T05:25:35.697 回答
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);
于 2012-05-10T05:37:56.387 回答
0

如果您正在寻找一种在现有 GridView 中动态添加 TextBox 的方法,那么使用 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);      
}
于 2012-05-10T05:41:33.657 回答