You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.Net C#实现GridView行选择无整页刷新的解决方案

解决GridView行选择时整页刷新的问题

这是ASP.NET Web Forms里很常见的整页回发问题,要实现筛选和行选择操作时的局部刷新,最直接的方案是使用UpdatePanel控件来包裹需要局部更新的区域,通过AJAX异步回发替代整页刷新。下面是具体的修改步骤:

1. 页面添加ScriptManager控件

UpdatePanel依赖ScriptManager来处理AJAX请求,所以需要在页面的<form>标签内先添加这个控件:

<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>

2. 用UpdatePanel包裹筛选控件和GridView

把你的筛选下拉框和GridView都放到UpdatePanel的ContentTemplate中,并配置触发局部更新的触发器:

<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
    <ContentTemplate>
        <!-- 原有的筛选下拉框区域 -->
        <div style="float: left">
            <ul>
                <li style="float: left; margin-right: 5px">Berechtigung: </li>
                <li style="float: left">
                    <asp:DropDownList Style="height: 25px; width: 100px; font-size: 12px; margin-top: -2px" ID="Filter_Berechtigung_DB" runat="server" AutoPostBack="True" OnSelectedIndexChanged="Filter_Berechtigung_DB_SelectedIndexChanged">
                        <asp:ListItem Text="" />
                    </asp:DropDownList>
                </li>
            </ul>
        </div>
        <!-- 原有的GridView控件 -->
        <asp:GridView ID="UserTable" runat="server" AutoGenerateColumns="False" Width="100%" CssClass="table table-striped table-bordered" OnSelectedIndexChanged="UserTable_SelectedIndexChanged" CellPadding="4" CellSpacing="2" ForeColor="Black">
            <Columns>
                <asp:BoundField HeaderText="" DataField="">
                    <ItemStyle Font-Names="Arial" ForeColor="Black" />
                </asp:BoundField>
                <asp:CommandField ShowSelectButton="True" />
            </Columns>
            <HeaderStyle BackColor="lightgray" ForeColor="Black" />
            <RowStyle CssClass="TableItemHover" BackColor="White"></RowStyle>
            <SelectedRowStyle BackColor="gray" Font-Bold="True" ForeColor="Black" />
        </asp:GridView>
    </ContentTemplate>
    <Triggers>
        <!-- 筛选下拉框的选择事件触发局部更新 -->
        <asp:AsyncPostBackTrigger ControlID="Filter_Berechtigung_DB" EventName="SelectedIndexChanged" />
        <!-- GridView行选择事件触发局部更新 -->
        <asp:AsyncPostBackTrigger ControlID="UserTable" EventName="SelectedIndexChanged" />
    </Triggers>
</asp:UpdatePanel>

3. 调整Page_Load方法避免重复绑定数据

在页面加载时,只有首次加载时才绑定初始数据,避免回发时覆盖筛选后的结果:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        // 首次加载时绑定完整的用户列表
        LoadData(ReadZugriff().ToList());
        // 这里可以添加DropDownList的选项初始化逻辑
        // ...
    }
}

原理说明

UpdatePanel通过AJAX实现异步回发:当配置的触发器(筛选下拉框的SelectedIndexChanged、GridView的SelectedIndexChanged)触发时,只会更新UpdatePanel内部的区域,而不会刷新整个页面。这样既保留了筛选和行选择的功能,又解决了整页刷新的问题。

另外,你在UserTable_SelectedIndexChanged中手动设置行背景色的代码可以保留,不过其实GridView的SelectedRowStyle已经配置了选中样式,两者可以任选其一使用。

内容的提问来源于stack exchange,提问作者C3DR1C_4k

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 20:02:37