首页 > 解决方案 > 回发后重新绑定控件后,更新面板中的事件未触发

问题描述

我在更新面板中有一个 Gridview 和一些 LinkBut​​ton。点击事件正确触发,我期望它们工作的方式。但是:在后面的代码中向网格添加额外的标题行后,我需要在每次回发后重新绑定网格。此后,单击导致回发,但该方法未执行。

<asp:UpdatePanel runat="server" ID="UpdatePanel2" UpdateMode="Always">
<ContentTemplate>
<asp:GridView ID="GridViewFollowUpMove" runat="server" AutoGenerateColumns ="false" OnRowDataBound="FollowUp_RowDataBound" OnDataBound="FollowUpMove_OnDataBound">
    <Columns>
        <asp:TemplateField HeaderText="Due date" ItemStyle-HorizontalAlign="left">
            <ItemTemplate>
                <asp:LinkButton ID="LB_DueDate" runat="server" OnClick="ActivateDueDate" CssClass="NoDeco" CommandArgument='<%# Bind("ISSUEID") %>'>
                <asp:Label ID="LabelDueDate" runat="server" Text='<%# Bind("DueDate","{0:dd.MM.yyyy}") %>' Width="60px" Class="line"/></asp:LinkButton>
                <asp:TextBox ID="TXTBX_DueDate" runat="server" Text='<%# Bind("DueDate") %>' Font-Size="11px" visible="false" OnTextChanged="TextChanged_DueDate" AutoPostBack="true"/>
            </ItemTemplate>
        </asp:TemplateField>

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            FillFollowUp();
        }
        FillFollowUp();
    } 

标签: c#asp.netupdatepanel

解决方案


我通过将创建和自定义附加标题行的命令移动到 OnRowCreated 事件来解决了这个问题。正如我在某处读到的:当回发发生时,必须在服务器上重新创建 Gridview,并且在此过程中为每个项目触发 ItemCreated,但 ItemDataBound 不是(因为控件属性是从 ViewState 中提取的)。所以在 DataBound 中构建这些标头是错误的选择!


推荐阅读