如何動態添加額外標籤控件(應僅在特定條件下添加)。 我試圖做這樣的事情:在某些情況下動態添加附加標籤控件到<ItemTemplate>
<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;
不過,雖然方法1是能夠正確地設置了「Column1中的文本價值,它無助於將Column的價值... 有什麼事我缺少或有沒有不同的方式來做到這一點?
這裏是方法一的DEFN:
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;
}
我強烈建議不要使用DataBinder.Eval - 它的緩慢和邪惡。最好轉換爲正確的類型並直接獲取數據。 (DataRow)Container.DataItem)[「Column1」],而不是DataBinder.Eval(Container.DataItem,「Column1」)。如果要將其轉換爲DataSource,那麼您應該寫((DataRow)Container.DataItem)[「Column1」]而不是DataBinder.Eval(Container.DataItem,「Column1」) – 2010-12-14 01:20:46
爲什麼你不能在類級別聲明一個名爲col2Holder的變量,並希望它包含對ItemTemplate中佔位符的引用,那麼將會有N個ItemTemplates包含它們的唯一佔位符。 – 2010-12-14 01:32:20
那麼解決這個問題的好方法是什麼?我確實需要僅在某些情況下生成,並非總是如此。謝謝! – 2010-12-14 01:49:50