c# - 分页无法正常工作

标签 c# asp.net gridview paging

我已经在我的 gridview 上打开了分页,但是当我尝试更改页面时,回发数据返回为空。

当页面第一次加载时,数据就在那里。

这是我第一次这样做,所以我可能做错了什么。

数据源是一个 membershipusercollection 列表。

这是我的代码...

protected void Page_Load(object sender, EventArgs e)
{
    count = 0;             

    switch (Request.QueryString["status"])
    {
        case "active":
            lblUserListTitle.Text = "Activated user accounts";
            break;
        case "inactive":
            lblUserListTitle.Text = "Inactive user accounts";
            break;
        case "locked":
            lblUserListTitle.Text = "Locked user accounts";
            break;
        case "online":
            lblUserListTitle.Text = "Users online";
            break;
        case "notverified":
            lblUserListTitle.Text = "Users accounts not yet verified";
            break;
        default:
            lblUserListTitle.Text = "All user accounts";
            break;
    }
    if (!IsPostBack)
        BindGrid();    

    lblSearchResult.Text = "There are " + count.ToString() + " registered users found.";
}
protected void BindGrid()
{
    MembershipUserCollection usersList = Membership.GetAllUsers();
    MembershipUserCollection filteredUsers = new MembershipUserCollection();

    foreach (MembershipUser user in usersList)
    {
        if (!Roles.IsUserInRole(user.UserName, "Admin") && !Roles.IsUserInRole(user.UserName, "Engineering"))
        {
            userProfile = Profile.GetProfile(user.UserName);

            if (txtFilterCustomerNo.Text.Length > 0)
            {
                ProfileCommon PC = Profile.GetProfile(user.UserName);
                if (PC.RaymarineAccountNo == txtFilterCustomerNo.Text.ToUpper())
                {
                    filteredUsers.Add(user);
                    count++;
                }
            }
            else
            {
                //filter on querystring
                if (Request.QueryString["status"] == "active")
                {
                    if (user.IsApproved && !user.IsLockedOut)
                    {
                        filteredUsers.Add(user);
                        count++;
                    }
                }
                else if (Request.QueryString["status"] == "inactive")
                {
                    if (!user.IsApproved && !user.IsLockedOut)
                    {
                        filteredUsers.Add(user);
                        count++;
                    }
                }
                else if (Request.QueryString["status"] == "locked")
                {
                    if (user.IsLockedOut)
                    {
                        filteredUsers.Add(user);
                        count++;
                    }
                }
                else if (Request.QueryString["status"] == "online")
                {
                    if (user.IsOnline)
                    {
                        filteredUsers.Add(user);
                        count++;
                    }
                }
                else if (Request.QueryString["status"] == "notverified")
                {
                    if (user.IsApproved && !userProfile.IsVerified)
                    {
                        filteredUsers.Add(user);
                        count++;
                    }
                }
                else
                {
                    filteredUsers.Add(user);
                    count++;
                }
            }
        }
    }

    GridView1.DataSource = filteredUsers;
    GridView1.DataBind();
}
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
    GridView1.PageIndex = e.NewPageIndex;
    BindGrid();
}

和 .aspx 页面...

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" Width="1000px" onrowdatabound="GridView1_RowDataBound" ViewStateMode="Enabled" AllowPaging="True" onpageindexchanging="GridView1_PageIndexChanging" PageSize="25">
                <Columns>
                    <asp:TemplateField ItemStyle-Width="70px">
                        <ItemTemplate>
                            <asp:HyperLink ID="lnkProfile" runat="server"><asp:Image ID="Image3" runat="server" ImageUrl="~/Content/admin_miniProfile.png" AlternateText="User Profile" /></asp:HyperLink>
                            &nbsp;<asp:HyperLink ID="lnkPermissions" runat="server"><asp:Image ID="Image2" runat="server" ImageUrl="~/Content/admin_miniPermissions.png" AlternateText="Permissions" /></asp:HyperLink>
                            &nbsp;<asp:HyperLink ID="lnkPassword" runat="server"><asp:Image ID="Image1" runat="server" ImageUrl="~/Content/admin_miniResetPassword.png" AlternateText="Reset Password" /></asp:HyperLink>
                        </ItemTemplate>
                    </asp:TemplateField>                        
                    <asp:BoundField DataField="UserName" HeaderText="User Name" />
                    <asp:TemplateField ItemStyle-Width="100px" HeaderText="Account No">
                        <ItemTemplate>                                
                            <asp:Label ID="lblAccountNo" runat="server" Text=""></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>                        
                    <asp:BoundField DataField="CreationDate" HeaderText="Created" ItemStyle-Width="160px" />
                    <asp:TemplateField ItemStyle-Width="20px">
                        <ItemTemplate>
                            <asp:HyperLink ID="lnkSalesman" runat="server"><asp:Image ID="imgFilter" runat="server" ImageUrl="~/Content/admin_miniFilter.png" /></asp:HyperLink>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField ItemStyle-Width="200px" HeaderText="Salesman">
                        <ItemTemplate>                                
                            <asp:Label ID="lblSalesman" runat="server" Text=""></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField ItemStyle-Width="20px">
                        <ItemTemplate>
                            <asp:HyperLink ID="lnkDelete" runat="server"><asp:Image ID="Image4" runat="server" ImageUrl="~/Content/admin_miniDeleteUser.png" AlternateText="Delete User" /></asp:HyperLink>
                        </ItemTemplate>
                    </asp:TemplateField>
                </Columns>    
                <PagerSettings Position="TopAndBottom" />
                <RowStyle Height="20px" VerticalAlign="Middle" />        
                <AlternatingRowStyle BackColor="#EEEEEE" />        
            </asp:GridView>

除分页外一切正常。

谁能帮帮我?如果我遗漏了任何重要信息,请告诉我,我会更新!!

最佳答案

我已经解决了!

我已将集合放入页面加载时的 session 中,并将 gridview 数据源绑定(bind)到 session 对象。仅在非回发时创建 session 对象。

更新后的代码有效...

protected void Page_Load(object sender, EventArgs e)
{
    count = 0;             

    switch (Request.QueryString["status"])
    {
        case "active":
            lblUserListTitle.Text = "Activated user accounts";
            break;
        case "inactive":
            lblUserListTitle.Text = "Inactive user accounts";
            break;
        case "locked":
            lblUserListTitle.Text = "Locked user accounts";
            break;
        case "online":
            lblUserListTitle.Text = "Users online";
            break;
        case "notverified":
            lblUserListTitle.Text = "Users accounts not yet verified";
            break;
        default:
            lblUserListTitle.Text = "All user accounts";
            break;
    }

    if (!IsPostBack)
    {
        MembershipUserCollection usersList = Membership.GetAllUsers();
        MembershipUserCollection filteredUsers = new MembershipUserCollection();

        foreach (MembershipUser user in usersList)
        {
            if (!Roles.IsUserInRole(user.UserName, "Admin") && !Roles.IsUserInRole(user.UserName, "Engineering"))
            {
                userProfile = Profile.GetProfile(user.UserName);

                if (txtFilterCustomerNo.Text.Length > 0)
                {
                    ProfileCommon PC = Profile.GetProfile(user.UserName);
                    if (PC.RaymarineAccountNo == txtFilterCustomerNo.Text.ToUpper())
                    {
                        filteredUsers.Add(user);
                        count++;
                    }
                }
                else
                {
                    //filter on querystring
                    if (Request.QueryString["status"] == "active")
                    {
                        if (user.IsApproved && !user.IsLockedOut)
                        {
                            filteredUsers.Add(user);
                            count++;
                        }
                    }
                    else if (Request.QueryString["status"] == "inactive")
                    {
                        if (!user.IsApproved && !user.IsLockedOut)
                        {
                            filteredUsers.Add(user);
                            count++;
                        }
                    }
                    else if (Request.QueryString["status"] == "locked")
                    {
                        if (user.IsLockedOut)
                        {
                            filteredUsers.Add(user);
                            count++;
                        }
                    }
                    else if (Request.QueryString["status"] == "online")
                    {
                        if (user.IsOnline)
                        {
                            filteredUsers.Add(user);
                            count++;
                        }
                    }
                    else if (Request.QueryString["status"] == "notverified")
                    {
                        if (user.IsApproved && !userProfile.IsVerified)
                        {
                            filteredUsers.Add(user);
                            count++;
                        }
                    }
                    else
                    {
                        filteredUsers.Add(user);
                        count++;
                    }
                }
            }
        }

        if (Session["FilteredUsers"] == null)
            Session.Add("FilteredUsers", new MembershipUserCollection());
        Session["FilteredUsers"] = filteredUsers;
    }

    BindGrid();    

    lblSearchResult.Text = "There are " + count.ToString() + " registered users found.";
}
protected void BindGrid()
{    

    GridView1.DataSource = (MembershipUserCollection)Session["FilteredUsers"];
    GridView1.DataBind();
}
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
    GridView1.PageIndex = e.NewPageIndex;
    BindGrid();
}

如果有比这更好的方法,请说,我还在学习asp.net/c#!!

谢谢

关于c# - 分页无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13515245/

相关文章:

c# - 如何使用 UIMap Coded UI Test Builder 进行本地测试

android - GridView 中的 ImageView 高度

c# - 我无法引用 Microsoft.Owin.Security.AuthenticationManager,为什么?

c# - 升级到 .NET 4.7 后为 "Predefined type System.ValueTuple is not defined or imported"

c# - Windows 用户的 AD 组

c# - 如何使用 jQuery 或 JavaScript 或服务器端代码获取客户端(用户)机器名称(计算机名称)。 (审查可能的方式)

c# - 您会用什么作为业务验证层?

asp.net - 使用 Azure Blob 存储中的 ascx 文件

c# - 获取 ASP.NET GridView 单元格值并在 JQuery 进度条中显示

asp.net - updatepanel 只更新第一次然后不会再次更新