none
GridViewのページングについて RRS feed

  • 質問

  •  

    お世話になっております。

     

    現在、ASP.NET 2.0 で開発をしております。


    GridViewのページングに関することなのですが、

    Default.aspxに、
    サーバーエクスプローラーより、testTableをドラッグアンドドロップで配置しております。
    配置されたGridView1の、[ページングを有効にする]にチェックを入れ、PageSizeは10にしてあります。

     

    やりたいこととしましては、
    Default.aspxにprintButtonを用意して、クリックすると、print.aspxという印刷ページを表示します。print.aspxにはDefault.aspxと同様にtestTableをドラッグアンドドロップで配置しております。
    このときに、Default.aspxのGridView1が2ページを表示している状態でprintButtonをクリックしたら、Default.aspxで2ページに表示されているレコードをprint.aspxで表示するようにしたいと思っています。


    ご教授していただけると幸いです。
    宜しくお願いします。

     

    環境:C#、WindowsXP

    2008年1月16日 8:11

回答

  • print.aspxでもGridViewで表示しているのであれば、Default.aspxにあるGridView1.PageIndexをprint.aspxにGETで渡し、print.aspxにあるGridViewのPageIndexプロパティにその値をセットしてしまうのが簡単です。

    GETで渡すには、ボタンをクリックした際にResponse.Redirectを使い、例えば2ページですと

    print.aspx?pi=2

    という形でprint.aspxへ遷移させます。

    print.aspxでは、Request.QueryStringを使ってpiの値を取り出すことができます。

    2008年1月17日 2:18
    モデレータ

すべての返信

  • print.aspxでどのような形で表示されたいのかわからないのですが、例えばSQL Server 2005ですとROW_NUMBER()が使えますので、指定された行から指定された数の行だけを取り出すことが可能です。この指定は、print.aspxへGETなどで渡してしまえば良いでしょう。

    2008年1月17日 1:04
    モデレータ
  • trapemiya様、レスありがとうございます。

     

    print.aspxでは、GridViewにSqlDataSourceでtestTableをバインドして表示させようと思っています。

     

    ROW_NUMBER()というのがあるんですね。

    当方の勉強不足でした。

     

    ひとつ質問なのですが、

    Default.aspxで表示しているGridViewがページング番号2のとき、

    現在表示している行を指定して、print.aspxへGETなどで渡すにはどのようにすればよろしいでしょうか?

    2008年1月17日 1:31
  • print.aspxでもGridViewで表示しているのであれば、Default.aspxにあるGridView1.PageIndexをprint.aspxにGETで渡し、print.aspxにあるGridViewのPageIndexプロパティにその値をセットしてしまうのが簡単です。

    GETで渡すには、ボタンをクリックした際にResponse.Redirectを使い、例えば2ページですと

    print.aspx?pi=2

    という形でprint.aspxへ遷移させます。

    print.aspxでは、Request.QueryStringを使ってpiの値を取り出すことができます。

    2008年1月17日 2:18
    モデレータ
  • お教えいただいたおかげで、piの値を取得することができました。

    参考にして下記のコードを書きました。

    Default.aspxのコード

        protected void printButton_Click(object sender, EventArgs e)
        {
            Session["page"] = GridView1.PageIndex;
           
            Response.Redirect("print.aspx?pi=" + Session["page"] + "");
        }

    print.aspxのコード

        protected void Page_Load(object sender, EventArgs e)
        {
            int page;
            page = Convert.ToInt32(Request.QueryString["pi"]);
            GridView1.PageIndex = page;

        }

    trapemiya様、ありがとうございました。

     

    2008年1月17日 5:11
  • print.aspxにあるGridView1に、Default.aspxにあるGridView1のPageIndexを渡す方法は、GET(クエリー文字列)を全く使わず、Session変数を経由して受け渡すことも可能です。

     

    Session["page"] = GridView1.PageIndex;

    とされていますので、既にテストされているかもしれませんが、念のために補足しておきます。

    2008年1月17日 6:18
    モデレータ