- PR -

OnRowDataBoundが2回呼び出されてしまう。

1
投稿者投稿内容
まいどん
会議室デビュー日: 2007/03/28
投稿数: 13
投稿日時: 2007-04-06 10:26
現在C#+ASP.NET2.0で開発をしています。
.NET系の開発は今回が初めてで行き詰まる度にここにも何度か投稿をし、解決方法を示していただき大変助かっています。
GridViewを利用し
フッターに総合計を出し、さらに10行毎に改ページも行っているのですが、
1ページ目の検索はうまくいくのですが、2ページ目のリンクをクリックし
2ページ目にいくと総合計がなぜか2倍されてしまっています。
調べてみるとページ遷移する時に呼ばれるOnPageIndexChangedで取得されているレコードの数は2件で、OnRowDataBoundがレコードの数+総合計の3回呼ばれています。
しかし、レコード1→レコード2→総合計の順番で呼ばれているのに、なぜか
同じ処理がもう1回走っています。
OnPageIndexChangedは1回だけ呼び出されているので他のプロパティが2回呼び出されている事はありません。
またバインドされるごとにOnRowDataBoundが呼ばれると書いてあったのですが、
OnPageIndexChanged内でSQLを発行しバインドされている以外にバインドをしている部分はありませんでした。
なお改ページ処理はGridViewに任せてありロジックは一切追加していません。
フッターに総合計を出すのもMSDNに書いてあった方法をそのまま利用しています。
周りにも原因の分かる人がおらず、ネットで調べてみても同じような現象になっているのは見つけられずに完全に行き詰まってしまっています。
何かヒントになるアドバイスをいたければと思いますのでよろしくお願い致します。

[ メッセージ編集済み 編集者: まいどん 編集日時 2007-04-06 10:34 ]

[ メッセージ編集済み 編集者: まいどん 編集日時 2007-04-06 12:01 ]
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2007-04-06 12:49
総合計はいつどのように計算していますか?
OnRowDataBound はその名の通り 一行 バインドされるごとに 一回 発生します。
_________________
かるあ のメモスニペット
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2007-04-06 12:52
初回ロードは上手くいくけど他はダメというパターンは、大概ポストバックの判定がまずかったりします。
その辺はどうですか?
_________________
囚人のジレンマな日々
まいどん
会議室デビュー日: 2007/03/28
投稿数: 13
投稿日時: 2007-04-06 13:09
自己解決しました。

改ページメソッドが呼ばれた時にSQL発行するのはよかったのですが、
その結果をGridViewにバインドをしているのがいけなかったようです。
正直どうしてこれがいけないのかもっとよく調べてみたいと思っているのですが、
1ページ目を検索したときに2ページ目以降に表示されるデータもすでにバインドが行われていて、改ページ処理をした時にまたバインドしてしまうと同じデータが2回バインドされてしまうといった状況になっていたのだと予想しています。
バインド処理が1回した通っていなかったので、てっきりSQLを走らせる度に前のバインド情報が消されて新しくバインドがされるのだと思っていました。
このバインドの仕組みをもっと勉強します。
囚人様、かるあ様、ありがとうございました。

protected void GridView_PageIndexChanged(object sender, EventArgs e) {

DataSet paramDataSet = null;
DataSet.ParamRow paramRow = null;
paramRow = GetParamData(paramDataSet);
paramDataSet = (DataSet)paramRow.Table.DataSet;
this.SqlDataSource.SelectCommand = MakeSqlSelect(paramDataSet);
//this.GridView.DataBind(); ←この部分がいけなかったようです

}
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-04-06 18:21
集計処理を始めるときに、集計結果を入れる変数をクリアしてないだけじゃない?
_________________
1

スキルアップ/キャリアアップ(JOB@IT)