开发者

Dynamically adding a Button to a PlaceHolder in a DataGrid

I have basically something like this:

<asp:datagrid id="DGrid" runat="server" AutoGenerateColumns="false">
  <asp:TemplateColumn HeaderText="Stuff">
    <ItemTemplate> 
      <asp:PlaceHolder id="PH" runat="server" />
    </ItemTemplate>
  </asp:TemplateColumn>
</asp:datagrid>

I need to add a Button to the PlaceHolder depending on the values of the data I am binding. At the moment I am adding the Button after the data is bound in Page_Load. The problem is that the data binding methods are not called in postbacks, so the Button disappears when I click on it.

Any suggestions on how to do this? Problem is that I need to know some attributes of the 开发者_开发技巧grid item to create the Button, so I cannot create it before the data has been bound.


How about subscribing to ItemCreated event?

Markup:

<asp:datagrid id="DGrid" runat="server" OnItemCreated="DGrid_ItemCreated" AutoGenerateColumns="false">...</asp:DataGrid>

Code-behind:

protected void DGrid_ItemCreated(object sender, DataGridItemEventArgs e)
{
    var ph e.Item.FindControl("PH") as PlaceHolder;
    // ...
}

UPDATE

Regarding the situation when the e.Item.DataItem is null on a postback: only the reliable information (e.g. databound control properties) is persisted across postbacks (if ViewState is enabled), the entire data items don't survive them. Therefore you have to manage the state by yourself. You can persist only the necessary data in a ViewState (and not the entire data items since it can blow it up).

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜