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
相关产品推荐
相关产品推荐

