【发布时间】:2013-10-04 19:44:08
【问题描述】:
我需要动态地将控件添加到 GridView,所以我添加了一个 PlaceHolder,但它给了我一个错误。
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
PlaceHolder plachldr = e.Row.FindControl("PlaceHolder2") as PlaceHolder;
Button btn = new Button() { ID = "btnShhow", Text = "Show" };
plachldr.Controls.Add(btn);
PlaceHolder placeholder = e.Row.FindControl("PlaceHolder1") as PlaceHolder;
TextBox txt1 = new TextBox();
placeholder.Controls.Add(txt1);
}
将控件添加到 PlaceHolder 时,出现以下错误:
对象引用未设置为对象的实例。
这是我的 GridView 的标记:
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" OnSelectedIndexChanging="GridView1_SelectedIndexChanging" onrowdatabound="GridView1_RowDataBound">
<Columns>
<asp:BoundField DataField="Name" HeaderText="Name" />
<asp:BoundField DataField="Salary" HeaderText="Salary" />
<asp:TemplateField>
<ItemTemplate>
<asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<asp:PlaceHolder ID="PlaceHolder2" runat="server"></asp:PlaceHolder>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
【问题讨论】:
-
您可能需要检查该行的类型 - 除非您在 GridView 中可以拥有的所有不同行类型中都有 PlaceHolder2。所以像这样: if (e.Row.RowType == DataControlRowType.DataRow) // 你的占位符代码在这里
-
@Pawan Bhise - 你的问题解决了吗