动态地将Button添加到DataGrid中的PlaceHolder

时间:2011-01-17 10:50:34

标签: asp.net

我的基本上是这样的:

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

我需要在PlaceHolder中添加一个Button,具体取决于我绑定的数据的值。目前,我在Page_Load中绑定数据后添加Button。问题是数据绑定方法没有在回发中调用,因此当我点击它时Button会消失。

有关如何执行此操作的任何建议?问题是我需要知道网格项的一些属性来创建Button,所以在绑定数据之前我无法创建它。

1 个答案:

答案 0 :(得分:1)

订阅ItemCreated活动怎么样?

标记:

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

代码隐藏:

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

<强>更新

关于回传上e.Item.DataItemnull的情况:只有可靠信息(例如数据绑定控件属性)在回发之间保持不变(如果启用了ViewState),整个数据项不会他们活下来。因此,你必须自己管理国家。您只能在ViewState中保留必要的数据(而不是整个数据项,因为它可以将其炸毁)。