c# - 回发后重新绑定控件后,更新面板中的事件未触发
问题描述
我在更新面板中有一个 Gridview 和一些 LinkButton。点击事件正确触发,我期望它们工作的方式。但是:在后面的代码中向网格添加额外的标题行后,我需要在每次回发后重新绑定网格。此后,单击导致回发,但该方法未执行。
<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();
}
解决方案
我通过将创建和自定义附加标题行的命令移动到 OnRowCreated 事件来解决了这个问题。正如我在某处读到的:当回发发生时,必须在服务器上重新创建 Gridview,并且在此过程中为每个项目触发 ItemCreated,但 ItemDataBound 不是(因为控件属性是从 ViewState 中提取的)。所以在 DataBound 中构建这些标头是错误的选择!
推荐阅读
- html - 显示:网格;导致宽度问题忽略css宽度属性
- python - python中的简单递归函数
- python-3.x - 当我使用 fastapi 运行 aiogram 时,FSM 不起作用
- vmware - 如何在 vSphere 6.5 Python vCenter API 中获取 VMware VM 的 UUID?
- json - 如何将变量(字符串格式的 checkoutID)附加到 URL?
- install4j - Install4J - 在 Windows 中安装应用程序时出错
- terraform - Terraform - 将值作为列表的字典转换为字符串
- c++ - 为快速排序 C++ 生成最坏的情况
- django - DJango ORM 双连接与 Sum
- javascript - 如何创建和排列至少 4 个名为测验的对象。数组中的每个对象将代表一个测验。在 JavaScript 中