【发布时间】:2016-12-02 10:18:04
【问题描述】:
我是 ASP.Net 世界的新手,对如何处理以下场景感到困惑。
在我的应用程序中,我必须在页面加载时从数据库中获取数据并将其显示在 GridView 中。该表目前有大约 1000 条记录,大约 7 列。但数据将继续增长。
这是我如何将数据绑定到网格的代码。
protected void Page_Load(object sender, EventArgs e)
{
var data = new AppsAuthData().GetAllUsers();
gridUsersInfo.DataSource = data;
gridUsersInfo.DataBind();
}
我开始知道,在上面的每个帖子中,上面的代码都会被执行(这显然不好)。所以我在函数的开头添加了以下内容
if (IsPostBack)
return;
var data = new AppsAuthData().GetAllUsers();
gridUsersInfo.DataSource = data;
gridUsersInfo.DataBind();
页面标记
<%@ Page Language="C#" AutoEventWireup="true" MasterPageFile="~/Site.Master" CodeBehind="RemoveUsers.aspx.cs" Inherits="AppsAuth.Authencations.RemoveUsers" %>
这又有一个问题,即在回发之后,GridView 没有什么可显示的。所以接下来我将结果保存到 ViewState 中,并且在每次回帖时我都在检索/更新 ViewState。
但由于在某些情况下数据可能非常庞大,那么处理此类问题的最佳选择是什么?
GridView sn-p
<asp:GridView ID="gridUsersInfo" runat="server" Width="100%" ForeColor="#333333" AllowPaging="True"
AllowSorting="True" AutoGenerateColumns="false" OnSorting="UserInfo_Sorting" OnRowEditing="gridUsersInfo_RowEditing"
OnPageIndexChanging="gridUsersInfo_PageIndexChanging" AutoGenerateEditButton="True">
> <Columns>
<asp:BoundField DataField="USER_ID" ReadOnly="True" HeaderText="ID" SortExpression="USER_ID" />
<asp:BoundField DataField="USER_NAME" ReadOnly="False" HeaderText="User Name" SortExpression="USER_NAME" />
</Columns>
</asp:GridView>
protected void gridUsersInfo_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
gridUsersInfo.PageIndex = e.NewPageIndex;
gridUsersInfo.DataBind();
}
【问题讨论】:
-
尝试在页面加载时将您的网格绑定代码保留在
!Ispostback中 -
通常不需要手动处理 ViewState 以在每次回发时重新加载网格。这似乎是您的 ASPX 标记或 ViewState 的常规设置的问题。请添加您的 ASPX 页面的标记。还要使用实际代码更新您的代码,否则有些人会在没有阅读您所有问题的情况下回答
-
@Steve 请查看更新后的问题(带有页面标记)
-
检查您是否有某种EnableViewState 和相关的ViewStateMode 属性设置为非默认值
-
@Steve 我没有更改任何默认设置,调试器显示
EnableViewState = true而 ViewStateMode =inherits
标签: c# asp.net gridview postback viewstate