1

わかりました 問題は、ページが数字として表示されたページングが必要なグリッドがあることです ページングセクションに2つのリンクボタンを追加して、ユーザーが次のページの前のページに移動できるようにしたい これが私のコードです

protected void CustomerGridView_RowCreated(object sender, GridViewRowEventArgs e)
{
    var grid = sender  as GridView
    if (e.Row.RowType == DataControlRowType.Pager)
    {
        var prvLink = new LinkButton();
        prvLink.Text = "<";
        prvLink.CommandName = "Page";
        prvLink.CommandArgument = "Prev";
        prvLink.EnableViewState = true;
        var nextLink = new LinkButton();
        nextLink.Text = ">";
        nextLink.CommandName = "Page";
        nextLink.CommandArgument = "Next";
        nextLink.EnableViewState = true;
        var prvCell = new TableCell();
        var nextCell = new TableCell();
        prvCell.Controls.Add(prvLink);
        nextCell.Controls.Add(nextLink);
        Table pagerTable = e.Row.Controls[0].Controls[0] as Table;
        TableRow row = pagerTable.Rows[0];
        row.Cells.AddAt(0, prvCell);
        row.Cells.AddAt(row.Cells.Count, nextCell);
        if (grid.PageIndex == 0)
        {
            prvCell.Enabled = false;
        }
        if (grid.PageIndex == grid.PageCount - 1)
        {
            nextCell.Enabled = false;
        }
    }
}

完全に機能しており、ユーザーは前後に移動できます (グリッドRowCommandイベントが発生するのがわかります)

問題は、ページ内にコードを配置したくないことです(ページを小さくして、他のクラスに責任を負わせるため)

ここに私のクラスがあります

public class GridStyler
{
    private GridView _grid;
    public GridStyler(GridView grid)
    {
        _grid = grid;
    }

    public void AddNextPreviousOnPager()
    {
        _grid.RowCreated += _grid_RowCreated;
    }

    void _grid_RowCreated(object sender, GridViewRowEventArgs e)
    {
        var grid = sender as GridView;
        if (e.Row.RowType == DataControlRowType.Pager)
        {
            var prvLink = new LinkButton();
            prvLink.Text = "<";
            prvLink.CommandName = "Page";
            prvLink.CommandArgument = "Prev";
            prvLink.EnableViewState = true;
            var nextLink = new LinkButton();
            nextLink.Text = ">";
            nextLink.CommandName = "Page";
            nextLink.CommandArgument = "Next";
            nextLink.EnableViewState = true;

            var prvCell = new TableCell();
            var nextCell = new TableCell();
            prvCell.Controls.Add(prvLink);
            nextCell.Controls.Add(nextLink);
            Table pagerTable = e.Row.Controls[0].Controls[0] as Table;
            TableRow row = pagerTable.Rows[0];
            row.Cells.AddAt(0, prvCell);
            row.Cells.AddAt(row.Cells.Count, nextCell);
            if (grid.PageIndex == 0)
            {
                prvCell.Enabled = false;
            }
            if (grid.PageIndex == grid.PageCount - 1)
            {
                nextCell.Enabled = false;
            }
        }
    }

}

次に、ページの読み込みでそのようなコードを呼び出すことができ、リンクボタンとそれらのクリックへの応答を作成する必要があります

var g = new GridStyler(CustomerGridView);
g.AddNextPreviousOnPager();

リンクボタンは問題なく作成されますが、ユーザーがクリックするとページが更新されますが、起動されRowCommandません(もちろん、ユーザーが他のボタンをクリックすると起動しますが、この2つの動的に作成されたボタンは起動しません)

どんな提案も本当に感謝しています

4

0 に答える 0