none
DetailsView更新後のGridView選択ページの表示 RRS feed

  • 質問

  • また基本的なことを教えて下さい。

    GridViewでページングを使用し、1ページ当たり5行表示させています。
    GridViewで選択された行(例えば3ページ目)の詳細をDetailsViewに表示し、DetailsViewにて更新をさせた後、GridViewのページが1ページに戻ってしまうのをなんとかしたいのですがどうすればよいのでしょうか?宜しくお願いします。

    2007年1月15日 2:37

回答

  • > 3ページ目が表示されてはいますがDetailsViewで更新した内容がGridView上に反映されていないのです...

    これをきちんと最初から書いていてくれれば。。。
    データを更新した場合、データのバインドをプログラムから行ってあげる必要があります。
    GridViewはデータベース内のデータが更新されたかどうかわからないので、ページが変わらない場合
    ViewStateに含まれている以前のデータをそのまま表示します。

    #今のままでもデータの更新後、別のページに一度うつってから3ページに戻ってくるとデータは
     更新されていると思います。

    2007年1月15日 8:22
  •  POD さんからの引用

    Page_Loadに入れなければならなかったのですか?私はItemUpdatedの中にResponse.Redirect("XXX.aspx")次にGridView1.PageIndex = Session("page")を記述していました。Page_Loadの中でないとGridView1.PageIndex = Session("page")が正しく処理されないのでしょうか?

    リダイレクトされた先のページにGridViewがあって、そこで3ページ目を表示するのではないかと思ったからです。同一ページであれば、リダイレクトする必要はないと思いますが、何か理由があるのでしょうか?

     POD さんからの引用

    >なぜ、反映されないのでしょうか? GridViewとDetailsViewは同一ページに存在しているのでしょうか?
    >同一ページに存在させて、こちらで簡単に試したところ、PageIndexにページ番号をセットしたところ、GridViewはきちんとそのページを表示しました。

    ごめんなさい。反映されないから質問されているんでしたね。(^^;


     POD さんからの引用

    GridViewとDetailsViewは同一ページに存在しています。もしかしたらマルチビューコントロールで更新と新規でDetailsViewを切替しているからでしょうか?
    >3ページ目が表示されていればいいような気がするんですが・・・。

    3ページ目が表示されてはいますがDetailsViewで更新した内容がGridView上に反映されていないのです...


    なるほど。更新されたデータが表示されていないということなんですね。
    MultiViewはあまり関係ないと思います。データソースのEnableCachingはどうなっていますでしょうか?デフォルトではfalseなんですが・・・。
    あと、やっぱりRedirectが気になります。どのように表示を切り替えられているのでしょうか?もう少し情報が欲しいところです。

    2007年1月15日 8:38
    モデレータ

すべての返信

  • GridViewのPageIndexに、この場合ですと3をセットすればいいんじゃないでしょうか?
    2007年1月15日 2:46
    モデレータ
  • trapemiyaさん大変お世話になっています。

    毎度毎度ありがとうございます。

    表示しているページの値をSession("page") = GridView1.PageIndexでセッションに保存し、ItemUpdatedにGridView1.PageIndex = Session("page")を入れると更新結果がGridViewに反映されません。この場合反映させる為にはどうすればよいのでしょうか?ACCESSでいうリフレッシュのようなものはありませんか?この状態では3ページ目が表示されています。Response.Redirect("XXX.aspx")を呼び出すと1ページに戻ってしまいます。

    2007年1月15日 3:11
  • Response.Redirect("XXX.aspx")を呼び出したときにセッションに保存されている値をPageIndexに設定してあげればいいのではないでしょうか。
    2007年1月15日 4:49
  • どっとねっとふぁんさん回答ありがとうございます。

    >Response.Redirect("XXX.aspx")を呼び出したときにセッションに保存されている値をPageIndexに設定してあげればいいのではないでしょうか。

    とありますが、具体的にどのようにコーディングすればよいのでしょうか?

     

    2007年1月15日 6:46
  • GridView1.PageIndex = Session("page") でいいと思いますけど。

    2007年1月15日 7:34
  • どっとねっとふぁんさんが言われているのは、ページのLoad時で、かつ、ポストバック時ではない時に、GridViewのPageIndexをセットすればいいということだと思います。

    ただ、その前に、

     POD さんからの引用

    表示しているページの値をSession("page") = GridView1.PageIndexでセッションに保存し、ItemUpdatedにGridView1.PageIndex = Session("page")を入れると更新結果がGridViewに反映されません。

    が気になります。
    なぜ、反映されないのでしょうか? GridViewとDetailsViewは同一ページに存在しているのでしょうか?
    同一ページに存在させて、こちらで簡単に試したところ、PageIndexにページ番号をセットしたところ、GridViewはきちんとそのページを表示しました。

     POD さんからの引用

    ACCESSでいうリフレッシュのようなものはありませんか?この状態では3ページ目が表示されています。

    3ページ目が表示されていればいいような気がするんですが・・・。

    ちょっと、私が理解できていないかもしれません。

    #どっとねっとふぁんさんの発言とかぶりました。(^^;

    2007年1月15日 7:38
    モデレータ
  • >GridView1.PageIndex = Session("page") でいいと思いますけど。

    そうですか...

    私もそう思ってResponse.Redirect("XXX.aspx")の前と後ろそれぞれに入れて試しましたが駄目でした。

    2007年1月15日 7:54
  • >どっとねっとふぁんさんが言われているのは、ページのLoad時で、かつ、ポストバック時ではない時に、GridViewのPageIndexを>セットすればいいということだと思います。

    Page_Loadに入れなければならなかったのですか?私はItemUpdatedの中にResponse.Redirect("XXX.aspx")次にGridView1.PageIndex = Session("page")を記述していました。Page_Loadの中でないとGridView1.PageIndex = Session("page")が正しく処理されないのでしょうか?

    >なぜ、反映されないのでしょうか? GridViewとDetailsViewは同一ページに存在しているのでしょうか?
    >同一ページに存在させて、こちらで簡単に試したところ、PageIndexにページ番号をセットしたところ、GridViewはきちんとそのページを表示しました。

    GridViewとDetailsViewは同一ページに存在しています。もしかしたらマルチビューコントロールで更新と新規でDetailsViewを切替しているからでしょうか?

    >3ページ目が表示されていればいいような気がするんですが・・・。

    3ページ目が表示されてはいますがDetailsViewで更新した内容がGridView上に反映されていないのです...

     

    2007年1月15日 8:11
  • > 3ページ目が表示されてはいますがDetailsViewで更新した内容がGridView上に反映されていないのです...

    これをきちんと最初から書いていてくれれば。。。
    データを更新した場合、データのバインドをプログラムから行ってあげる必要があります。
    GridViewはデータベース内のデータが更新されたかどうかわからないので、ページが変わらない場合
    ViewStateに含まれている以前のデータをそのまま表示します。

    #今のままでもデータの更新後、別のページに一度うつってから3ページに戻ってくるとデータは
     更新されていると思います。

    2007年1月15日 8:22
  •  POD さんからの引用

    Page_Loadに入れなければならなかったのですか?私はItemUpdatedの中にResponse.Redirect("XXX.aspx")次にGridView1.PageIndex = Session("page")を記述していました。Page_Loadの中でないとGridView1.PageIndex = Session("page")が正しく処理されないのでしょうか?

    リダイレクトされた先のページにGridViewがあって、そこで3ページ目を表示するのではないかと思ったからです。同一ページであれば、リダイレクトする必要はないと思いますが、何か理由があるのでしょうか?

     POD さんからの引用

    >なぜ、反映されないのでしょうか? GridViewとDetailsViewは同一ページに存在しているのでしょうか?
    >同一ページに存在させて、こちらで簡単に試したところ、PageIndexにページ番号をセットしたところ、GridViewはきちんとそのページを表示しました。

    ごめんなさい。反映されないから質問されているんでしたね。(^^;


     POD さんからの引用

    GridViewとDetailsViewは同一ページに存在しています。もしかしたらマルチビューコントロールで更新と新規でDetailsViewを切替しているからでしょうか?
    >3ページ目が表示されていればいいような気がするんですが・・・。

    3ページ目が表示されてはいますがDetailsViewで更新した内容がGridView上に反映されていないのです...


    なるほど。更新されたデータが表示されていないということなんですね。
    MultiViewはあまり関係ないと思います。データソースのEnableCachingはどうなっていますでしょうか?デフォルトではfalseなんですが・・・。
    あと、やっぱりRedirectが気になります。どのように表示を切り替えられているのでしょうか?もう少し情報が欲しいところです。

    2007年1月15日 8:38
    モデレータ
  • >これをきちんと最初から書いていてくれれば。。。

    上記で書いたつもりでしたが、よく分らない文章ですいません。

    ****

    表示しているページの値をSession("page") = GridView1.PageIndexでセッションに保存し、ItemUpdatedにGridView1.PageIndex = Session("page")を入れると更新結果がGridViewに反映されません。この場合反映させる為にはどうすればよいのでしょうか?ACCESSでいうリフレッシュのようなものはありませんか?この状態では3ページ目が表示されています。Response.Redirect("XXX.aspx")を呼び出すと1ページに戻ってしまいます。

    ****


    >データを更新した場合、データのバインドをプログラムから行ってあげる必要があります。
    >GridViewはデータベース内のデータが更新されたかどうかわからないので、ページが変わらない場合
    >ViewStateに含まれている以前のデータをそのまま表示します。

    要はResponse.Redirect("XXX.aspx")ではなく、GridView1.DataBind()で再バインドをしなければ思う結果が返ってこないということですね?Response.Redirect("XXX.aspx")ではなく、GridView1.DataBind()でうまくいきました。

    なかなか文章で説明するのは難しいですね!よく解っていないからなおさら難しい...

    どっとねっとふぁんさんtrapemiya さんありがとうございました。

    2007年1月15日 8:43
  • >リダイレクトされた先のページにGridViewがあって、そこで3ページ目を表示するのではないかと思ったからです。同一ページであれば、リダイレクトする必要はないと思いますが、何か理由があるのでしょうか?

     特にないです。その時点ではそれ以外思いつかずResponse.Redirectでデータを更新させていました。ですが、ページングを有効にしたとたんにこのような質問をするはめになった次第です。

    >ごめんなさい。反映されないから質問されているんでしたね。(^^;

    私も言葉足らずで申し訳ありません。

    >データソースのEnableCachingはどうなっていますでしょうか?デフォルトではfalseなんですが・・・。

    EnableCachingは使用していませんのでデフォルトのままです。

    >あと、やっぱりRedirectが気になります。どのように表示を切り替えられているのでしょうか?もう少し情報が欲しいところです。

    簡単に纏めるとマスタページコンテンツプレースホルダー内の上部にGridView下部にマルチビューを配置しビュー1,2でそれぞれ更新削除用と新規用を切り替えて使用しています。この時の切替方法としましてはGridView選択ボタンでビュー1を表示、コンテンツフォルダ内に新規ボタンを新たに配置しボタンクリックでビュー2を表示。

    とこんな感じです。

    2007年1月15日 9:08