GridView不会在第一次回发后更改所选行

本文关键字:第一次 GridView | 更新日期: 2023-09-27 18:12:46

我有一个用户控件,可以从一个表中进行单个选择,其中包含一个GridView在一个UpdatePanel

<asp:UpdatePanel runat="server" ID="upSelection" UpdateMode="Conditional" ChildrenAsTriggers="false">
    <ContentTemplate>
<asp:TextBox runat="server" ID="txtControlText" SkinID="M_Selection" ReadOnly="true"></asp:TextBox>
    <asp:Button runat="server" ID="btnSelection" Text="..." CssClass="btnSelection" OnClick="btnSelection_Click" CausesValidation="false" /><asp:Panel runat="server" ID="popupSelection" CssClass="popup">
        <asp:UpdatePanel runat="server" ID="upSelectionPopup" UpdateMode="Conditional" class="updatePanel">
            <ContentTemplate>
                <div class="popup-content">
                    <asp:GridView ID="gvSelection"  SelectedRowStyle-BackColor="#FFBCBC"  runat="server" OnRowDataBound="gvSelection_RowDataBound">
                    </asp:GridView>
                </div>
            </ContentTemplate>
        </asp:UpdatePanel>        
                <asp:ImageButton runat="server" ID="btnSaveSelection" SkinID="Save" OnClick="btnSaveSelection_Click" CausesValidation="false" /></ContentTemplate></asp:UpdatePanel>

当我点击btnSelection时,div popup-content通过jquery对话框显示,当我点击btnSaveSelection时再次隐藏。在弹出窗口关闭时,我用所选的行信息更新文本框。

我使用这个行数据绑定事件来启用行选择,这将突出显示所选的行

protected void gvSelection_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
        e.Row.Attributes["onclick"] = Page.ClientScript.GetPostBackClientHyperlink((GridView)sender, "Select$" + e.Row.RowIndex);
}

我第一次打开弹出窗口的时候,这个效果很好。从第二次开始,如果我之前选择了一行并确认,那么当我单击一行时,我不会看到新选择的行高亮显示。执行回发并在服务器端正确地选择行,因为在保存选择时,我看到文本框被更新为正确的值。问题是客户端不呈现gridview与高亮变化。

请注意,如果我打开和关闭弹出窗口没有任何确认,一切正常工作,我看到不同的行被突出显示在点击。

这似乎是一个与选择事件本身无关的客户端呈现问题,因为如果我启用分页,当有先前选择的行时,当我单击"下一步"按钮时,我看不到新页面。只有在不确认任何内容的情况下,我才能看到其他页面。

令人不安的是,如果我检查响应的内容,当我点击一行发送到客户端,在它里面,我看到正确的table,即tr的背景颜色是我刚刚点击。只是这不会被渲染到客户端!

我尝试将事件从RowDataBound更改为RowCreated;我尝试将OnSelectedIndexChanged事件附加到gridview并在代码后面强制upSelectionPopup.Update();,但代码中的所有内容和运行时似乎都是正确的,直到我应该在浏览器中看到新的gridview的地方,我没有。

任何想法?谢谢你

GridView不会在第一次回发后更改所选行

我认为这是由于update panel。在内容面板之后尝试添加

</ContentTemplate>
            <Triggers>
                <asp:PostBackTrigger ControlID="whicheverbuttonyouaredoing" />
            </Triggers>
        </asp:UpdatePanel>