【问题标题】:Gridview paging Show all RecordsGridview 分页 显示所有记录
【发布时间】:2012-09-19 21:47:50
【问题描述】:

我有一个启用了分页的 gridview。我在 gridview 的寻呼机上也有一个下拉菜单,用户可以在其中选择他们想要检索的每页记录的数量。更改下拉菜单后,将触发一个事件(如下所示)以使用每个页面请求的更新结果重新运行查询。这很好用。但是,我确实希望在下拉列表中也有一个值“All”,而我用来暗示这一点的方法是禁用分页。

这一切都非常出色,除了一个问题。当用户在下拉列表中选择“全部”时,我希望在更新 gridview 后仍显示寻呼机。它没有显示,因为我关闭了寻呼,但是有没有办法再次显示寻呼机?请参阅下面的事件代码。 (如您所见,我在最后重新启用了寻呼机,但这没有效果)

谢谢 达摩

下拉更改事件的代码

void GridViewMainddl_SelectedIndexChanged(object sender, EventArgs e)
        {
            //changes page size
            if ((((DropDownList)sender).SelectedValue).ToString() == "All")
            {

                GridViewMain.AllowPaging = false;

            }
            else
            {
                GridViewMain.PageSize = int.Parse(((DropDownList)sender).SelectedValue);

            }



            //binds data source
            Result fAuditOverallStatusLatest = new Result(sConn);
            GridViewMain.DataSource = Result.getAuditOverallStatusLatest();            
            GridViewMain.PageIndex = 0;
            GridViewMain.DataBind();
            GridViewMain.AllowPaging = true;
            GridViewMain.BottomPagerRow.Visible = true;
            GridViewMain.TopPagerRow.Visible = true;
        }

背后的 DDL 代码

protected void GridViewMain_RowCreated(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.Pager)
            {
                DropDownList GridViewMainddl = new DropDownList();
                //adds variants of pager size
                GridViewMainddl.Items.Add("5");
                GridViewMainddl.Items.Add("10");
                GridViewMainddl.Items.Add("20");
                GridViewMainddl.Items.Add("50");
                GridViewMainddl.Items.Add("100");
                GridViewMainddl.Items.Add("200");
                GridViewMainddl.Items.Add("500");
                GridViewMainddl.Items.Add("All");
                GridViewMainddl.AutoPostBack = true;
                //selects item due to the GridView current page size
                ListItem li = GridViewMainddl.Items.FindByText(GridViewMain.PageSize.ToString());
                if (li != null)
                    GridViewMainddl.SelectedIndex = GridViewMainddl.Items.IndexOf(li);
                GridViewMainddl.SelectedIndexChanged += new EventHandler(GridViewMainddl_SelectedIndexChanged);
                //adds dropdownlist in the additional cell to the pager table
                Table pagerTable = e.Row.Cells[0].Controls[0] as Table;
                TableCell cell = new TableCell();
                cell.Style["padding-left"] = "15px";
                cell.Controls.Add(new LiteralControl("Page Size:"));
                cell.Controls.Add(GridViewMainddl);
                pagerTable.Rows[0].Cells.Add(cell);
                //add current Page of total page count
                TableCell cellPageNumber = new TableCell();
                cellPageNumber.Style["padding-left"] = "15px";
                cellPageNumber.Controls.Add(new LiteralControl("Page " + (GridViewMain.PageIndex + 1) + " of " + GridViewMain.PageCount));
                pagerTable.Rows[0].Cells.Add(cellPageNumber);

            }
        }

【问题讨论】:

    标签: asp.net gridview


    【解决方案1】:

    把这个放在你的Page_Init:

    GridViewMain.PreRender += new EventHandler(GridViewMain_PreRender);

    然后在您的Page 班级的其他地方:

    void GridViewMain_PreRender(object sender, EventArgs e)
    {
        var pagerRow = (sender as GridView).BottomPagerRow;
        if (pagerRow != null)
        {
            pagerRow.Visible = true;
        }
    }
    

    然后为您的下拉事件:

    void GridViewMainddl_SelectedIndexChanged(object sender, EventArgs e)
    {
        MyServices fServices = new FAServices(sConn);
        Result fAuditOverallStatusLatest = new Result(sConn);
        var data = Result.getAuditOverallStatusLatest();
    
        //changes page size
        if ((((DropDownList)sender).SelectedValue).ToString() == "All")
        {
            GridViewMain.PageSize = data.Count();
        }
        else
        {
            GridViewMain.PageSize = int.Parse(((DropDownList)sender).SelectedValue);
        }
    
        //binds data source
        GridViewMain.DataSource = data;            
        GridViewMain.PageIndex = 0;
        GridViewMain.DataBind();
        GridViewMain.AllowPaging = true;
    }
    

    在该 PreRender 事件中,您必须为首页页面复制该代码。

    编辑:要选择 All,请在 GridViewMain_RowCreated 中进行此更改:

    if (li != null)
    {
        GridViewMainddl.SelectedIndex = GridViewMainddl.Items.IndexOf(li);
    }
    else
    {
        GridViewMainddl.SelectedIndex = GridViewMainddl.Items.Count - 1;
    }
    

    【讨论】:

    • 嗨,你能把你的答案中的_displayPager替换为True吗?和data.Count;与 data.Count(); .到目前为止,它们是我对您的代码所做的仅有的 2 处更改。您的代码运行良好(上面有我的轻微修改),但重绘页面时 ddl 中未显示值“All”。它总是恢复到下拉列表中的第一个值,即在我的情况下为 5? (我在上面的问题中添加了我的 ddl 代码,以防有帮助)谢谢 damo
    • 进行了这些编辑。此外,只需添加另一行以将 All 添加到创建菜单的代码中的下拉列表中。
    • 你的意思是添加 GridViewMainddl.Items.Add("All");在函数 protected void GridViewMain_RowCreated(object sender, GridViewRowEventArgs e) 的末尾(问题中显示的函数)。如果是这样,那不起作用?
    • 实际上,您似乎正在将“全部”添加到代码中的菜单中。我会在您的GridViewMain_RowCreated 代码中设置一个断点,以确保它可以正常执行该代码。我不明白为什么All 不会出现在菜单中,但您所有其他页面大小选项都会...
    • 所有都在菜单中,但未选中。当全部被选中时,它会恢复到下拉菜单中的第一项。 When any other page size is selected it works perfect!有趣....!
    猜你喜欢
    • 2016-07-03
    • 1970-01-01
    • 2012-12-05
    • 2014-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多