如何动态添加额外的标签控件(仅应在某些条件下添加)。我正在尝试做这样的事情:
<asp:DataGrid id="dg" runat="server" AutoGenerateColumns="false">
<Columns>
<asp:TemplateColumn SortExpression="Column1">
<HeaderTemplate>
<asp:LinkButton Runat="server" text="Column1 Hdr" ID="col1Hdr">
</asp:LinkButton>
</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="col1Label" runat="server" Text='<%# Method1(DataBinder.Eval(Container.DataItem, "Column1").ToString(), DataBinder.Eval(Container.DataItem, "Column2").ToString()) %>' >
<asp:PlaceHolder ID="col2Holder" runat="server"></asp:PlaceHolder>
</asp:Label>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>
或者,我尝试将占位符放在单独的模板中:
<EditItemTemplate>
<asp:PlaceHolder ID="col2Holder" runat="server"></asp:PlaceHolder>
</EditItemTemplate>
但无济于事。关于如何仅在某些情况下创建占位符的任何提示(例如对于 Column1/Column2 的某些值),而不是选择中继器方法...我得到一个空引用异常但是当我不得不明确提及时解决了:
protected PlaceHolder col2Holder = new Placeholder();
代替
protected PlaceHolder col2Holder;
但是,尽管 method1 能够正确设置 'Column1 的文本值,但它对 Column2 的值没有任何作用......我是否缺少某些东西或者有其他方法可以做到这一点?
这是method1的定义:
public string Method1(string col1, string col2)
{
col1 += "Called method1";
Label col2label= new Label();
col2label.Visible = true;
col2label.Text = col2;
col2Holder.Controls.Add(col2label);
col2Holder.DataBind();
return col1;
}