0

ページングが有効になっているグリッドビューがあります。また、グリッドビューのページャーにドロップダウンがあり、ユーザーはページごとに取得するレコード数を選択できます。ドロップダウンが変更されると、イベントが発生し (以下に示す)、ページ リクエストごとに更新された結果でクエリが再実行されます。これは非常にうまく機能します。ただし、ドロップダウンにも値「すべて」を設定したかったのですが、これを実装するために使用した方法は、ページングを無効にすることです。

これは、1 つの問題を除いてすべて見事に機能します。ユーザーがドロップダウンで「すべて」を選択すると、グリッドビューが更新されてもページャーを表示したいと思います。ページングをオフにしたため表示されませんが、ページャーを再度表示する方法はありますか? イベントについては、以下の私のコードを参照してください。(ご覧のとおり、最後にページャーを有効にしますが、これは効果がありません)

ありがとうダモ

ドロップダウン変更のコード ビハインド イベント

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);

            }
        }
4

1 に答える 1

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;
}
于 2012-09-19T21:54:48.483 に答える