C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: GridViewとDBテーブル更新後の再ロード処理について


(過去ログ 49 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■26912 / inTopicNo.1)  GridViewとDBテーブル更新後の再ロード処理について
  
□投稿者/ ド素人SE (1回)-(2008/10/22(Wed) 19:16:00)

分類:[ASP.NET (C#)] 

はじめまして、いくら調べても、わからないので、質問させていただきます。
環境は:VS2005/asp.net(C#)/oracle10Gです。

現状出来ている処理
1.ボタン("データ表示")ボタン押下
2.DBテーブルからデータを画面のGridViewにセットして、テーブル情報を表示。
3.GridViewに設置してある、ボタン("データ修正")を押下すると、押下した行のデータを取得し、画面の遷移。
4.↑画面遷移時に画面のデータをセッションに保存。
5.遷移先画面でテーブルデータの修正(または削除)の処理をする。
6.5の処理が終了後、ボタン("戻る")を押下すると、初期のGridViewを表示画面に戻ります。
--------------------------------------------------------------------------------------
ここまではできているのですが・・・。
ボタン(戻る)で画面を戻ってきたときに、GridViewに表示されるデータが反映されません。
テーブルデータを取得しGridViewで表示させる処理は、ボタン("データ表示")押下時のメソッドで行っているため、
戻ってきて、ボタン("データ表示")押下すると反映されるのですが、戻ってきて、画面表示時に既に反映させたいです。
・・・ものすごいわかりづらい説明ですいません。
簡単に図で説明させていただきますと。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
"データ表示"ボタン押下
       ↓
【一覧表示画面】
______________________________________
|番号   |名前            |Button     |
|_______|________________|___________|
|     1 |ああ            |   |修正|  |
|_______|________________|___________|GridView

       ↓修正ボタン押下、ページ遷移
【テーブルデータ修正画面】
遷移画面にてテーブルデータ修正(UPDATE)
	1 → 2
	ああ → いい に変更。

       ↓戻るボタン押下、GridView画面に遷移
【一覧表示画面】
______________________________________
|番号   |名前            |Button     |
|_______|________________|___________|
|     2 |いい            |   |修正|  |
|_______|________________|___________|GridView
のようにしたいです。
現状ではデータが変わりません。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
自分的にセッションの中身を変えることができれば、いいと思うのですが、どのタイミングで行えばいいかわかりません。
素人でうまく説明できませんがよろしくお願いします。
長文失礼しました。

引用返信 編集キー/
■26915 / inTopicNo.2)  Re[1]: GridViewとDBテーブル更新後の再ロード処理について
□投稿者/ Jitta on the way (197回)-(2008/10/22(Wed) 19:37:36)
No26912 (ド素人SE さん) に返信

「戻る」から、クライアントのキャッシュが表示されているのですよ。セッションは関係ありません。
引用返信 編集キー/
■26926 / inTopicNo.3)  Re[1]: GridViewとDBテーブル更新後の再ロード処理について
□投稿者/ いしだ (174回)-(2008/10/23(Thu) 00:33:01)
2008/10/23(Thu) 00:37:52 編集(投稿者)

以下のような手順でどうでしょうか。

1.戻るボタンイベントで、セッションにデータ表示が必要だというフラグを保存し、GridViewのあるページにRedirectする。
2.GridViewのあるページのPage_Loadで1.でセッションに保存したフラグをチェックし、必要ならデータ表示する。
(この時フラグを削除かクリアする事を忘れずに)
引用返信 編集キー/
■26933 / inTopicNo.4)  Re[2]: GridViewとDBテーブル更新後の再ロード処理について
□投稿者/ みきぬ (171回)-(2008/10/23(Thu) 10:06:56)
・「戻る」ボタンが javascript:history.back() か javascript:history.go(-1) で実装されている場合(要はブラウザの「戻る」と同等の場合)

→ 「戻る」ボタンの機能を「1番目の画面に遷移する」ように変えればよい

・「戻る」ボタンが 上で書いたような機能ではない場合

→ 説明された状況だけではよくわからないので、「戻る」ボタンでどういうことをしているのか、一覧表示ではセッション情報に関係なく、単に一覧を取得して表示以上のことをしているのかどうか、説明がほしいかなあ。
引用返信 編集キー/
■26956 / inTopicNo.5)  Re[3]: GridViewとDBテーブル更新後の再ロード処理について
□投稿者/ ド素人SE (2回)-(2008/10/23(Thu) 19:34:47)
2008/10/23(Thu) 19:40:57 編集(投稿者)
色々とご回答いただきありがとうございます。

> ・「戻る」ボタンが 上で書いたような機能ではない場合
> 
> → 説明された状況だけではよくわからないので、「戻る」ボタンでどういうことをしているのか、一覧表示ではセッション情報に関係なく、単に一覧を取得して表示以上のことをしているのかどうか、説明がほしいかなあ。

説明不足でしたすいません。

1.修正画面遷移時一覧データをセッションに格納
2.「戻る」ボタンはjavascriptで制御はしていないです。
3.「戻る」ボタンを押下した時のイベント処理は
4.redirectPageで、前画面(一覧)に遷移するようにしているだけです。
↑「戻る」ボタンは仕様的に、画面IDを渡して、システム共通メソッドで行うようにしているので、「戻る」ボタン処理の中身を変えることができません。
また、共通メソッドを呼び出す前に、セッションの中身を更新するような処理を入れようとしたら、却下されました。

そして一覧表示画面のPage_Loadで、セッションを取得して、セッション内容がnullではなかったら、セッション情報のテーブルデータを画面にセットするといった、動きです。

=======・・ソース的には・・=========================================
●「戻る」ボタン押下
〜〜画面側のクラス〜〜〜〜〜〜〜〜〜
protected void btn_return_Click(object sender, EventArgs e)
{
	//共通画面イベントクラスのnew生成
	MainOyaEventClass ev = new JibunClass;
	//戻るイベントの呼び出し
	ev.Act_return();
	//画面遷移
	Response.Redirect(ev.redirectPage);
}
〜〜イベント側〜〜〜〜〜〜〜〜〜〜〜
//共通のクラスを継承してオーバーライドする
public class JibunClass : MainOyaEventClass
{
	protected override string Act_return()
    {
        return "画面ID.aspx";
    }
}

//親クラス
public abstract class MainOyaEventClass : BaseEvent
{
	public void Act_return()
    {
        // 一覧表示画面へ
        redirectPage = strMenuPageScreenID();
    }
    
    //  一覧表示画面に遷移する際の画面ID
    protected abstract string strMenuPageScreenID();
}

//さらに親
public abstract class BaseEvent : System.Web.UI.Page
{
	public String redirectPage
    {
        get
        {
            return _redirectPage;
        }
        set
        {
            _redirectPage = value;
        }
    }
}



●Page_LoadのGridView設定部
//セッション内容取得
プロセスビーン pb = (プロセスビーン)Session[XXX_ID];

//Page_Loadでポストバック判断後の画面表示設定
if (Session[XXX_ID] != null)
{
	//セッションの中身を取得
	Bean1 pb = (Bean1)Session[修正画面に遷移する前に設定したセッション];
	
	GridView1.DataSource = pb.dsTableData; //データ表示ボタンで取得したDBのテーブルデータをDataSetしたもの。
	GridView1.PageIndex = pb.intPageIndex;
	GridView1.DataBind();
}
====================================================================
です。

余計わかりにくくなってしまったかもしれませんが・・・
要は、GridView1.DataSource = pb.dsTableData;の処理の前に、このdsTableDataを更新できればいいと思うのですが、全くそのタイミングがわかりません。
・・・ということです。

長文失礼しました。

引用返信 編集キー/
■26957 / inTopicNo.6)  Re[4]: GridViewとDBテーブル更新後の再ロード処理について
□投稿者/ みきぬ (175回)-(2008/10/23(Thu) 20:02:34)
2008/10/23(Thu) 20:23:34 編集(投稿者)

No26956 (ド素人SE さん) に返信
> ●Page_LoadのGridView設定部
> //セッション内容取得
> プロセスビーン pb = (プロセスビーン)Session[XXX_ID];
>
> //Page_Loadでポストバック判断後の画面表示設定
> if (Session[XXX_ID] != null)
> {
> //セッションの中身を取得
> Bean1 pb = (Bean1)Session[修正画面に遷移する前に設定したセッション];
>
> GridView1.DataSource = pb.dsTableData; //データ表示ボタンで取得したDBのテーブルデータをDataSetしたもの。
> GridView1.PageIndex = pb.intPageIndex;
> GridView1.DataBind();
> }

なるほど、Session[XXX_ID] で一覧情報を持っちゃってるのかな。
私だったら、セッション情報に持つのはIDだけにして、非ポストバック時の処理で
・セッション情報があれば、IDを使ってデータベースからレコードを検索し、結果を表示する
・セッション情報がなければ、一覧に何も表示しない
ように作るかなぁ。

セッションには大きなデータは持たないのがセオリーです。
それにこうすれば、画面遷移時に常に最新のデータをデータベースから取得してくれるし。

-----
若干記述を追加。
引用返信 編集キー/
■26987 / inTopicNo.7)  Re[5]: GridViewとDBテーブル更新後の再ロード処理について
□投稿者/ ド素人SE (4回)-(2008/10/24(Fri) 11:49:04)
回答ありがとうございます!!
早速結果ですが・・・。

> なるほど、Session[XXX_ID] で一覧情報を持っちゃってるのかな。
> 私だったら、セッション情報に持つのはIDだけにして、非ポストバック時の処理で
> ・セッション情報があれば、IDを使ってデータベースからレコードを検索し、結果を表示する
> ・セッション情報がなければ、一覧に何も表示しない
Session[XXX_ID]にはIDだけを持たせるようにしました。
遷移先修正画面でIDを条件にデータ修正させる。
「戻る」ボタンで、一度セッションの中身をnullにして、戻ってきたとき一覧を表示させないようにして、
修正したデータを確認したい場合は、ユーザーに再度「データ表示」ボタンを押させるようにしました。

> セッションには大きなデータは持たないのがセオリーです。
システム的にそれほど大量のデータではないので、いいかな・・・って思ってましたけど、やはりまずいですね。

とても参考になりました。ありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -