- PR -

DataGRIDのページについて

投稿者投稿内容
なぼな
ベテラン
会議室デビュー日: 2004/08/04
投稿数: 61
投稿日時: 2004-08-06 13:44
たびたびお世話になっております。

.NET VB開発環境下で、
DataGRIDにDBデータを表示することはできました。
次にページの制御をするのですが、マニュアル通りに行うと、
DataGRID1.CurrentPageIndex = e.NewPageIndex
DataGRID1.DataBind()
ということのようです。
DataGRID1.DataBind()
の部分でエラーが表示されてしまいます。
「CurrentPageIndex 値が無効です。 値は 0 以上で PageCount より小さくなければなりません。」
とか言ってきます。
PageCountは28で、CurrentPageIndexは0から以上の値を設定しようとしています。(デバッガより)
DataBind()を行わないと、当然ですがデータ表示に変化はありません。
どなたか、初心者を救済してください。
よろしくお願いします。
えんぞ@?
ぬし
会議室デビュー日: 2004/07/06
投稿数: 271
お住まい・勤務地: はまっこ
投稿日時: 2004-08-06 14:24
回答にはなっておりませんが...

↓この辺を良く読んで試してみれば、まずつまづかないかと重いますが...(^^;
http://www.atmarkit.co.jp/fdotnet/dotnettips/068pagingdg/pagingdg.html
http://www.atmarkit.co.jp/fdotnet/dotnettips/069numericpg/numericpg.html

参考程度に
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=6768&forum=7

# (Webアプリ or Winアプリ!?)
なぼな
ベテラン
会議室デビュー日: 2004/08/04
投稿数: 61
投稿日時: 2004-08-06 14:56
えんぞ@さんありがとうございます。

早速拝見させていただきました。
たぶん、
が、やはりうまくいきません。
プロパティのAllowPageなど、ページ関係のプロパティはTrueになっていて、
イベントの取得もOKです。
DataGRID1.CurrentPageIndex = e.NewPageIndex
DataGRID1.DataBind()   <==ここでエラーになってしまいます。
「CurrentPageIndex 値が無効です。 値は 0 以上で PageCount より小さくなければなりません。」
やはりエラーです。

># (Webアプリ or Winアプリ!?)
Webアプリです。
いろいろ探しても、ASP .NETのサンプルやBBSが多く、
もしかして、.NET VBではできないことなのでしょうか?
えんぞ@?
ぬし
会議室デビュー日: 2004/07/06
投稿数: 271
お住まい・勤務地: はまっこ
投稿日時: 2004-08-06 15:24
念のためですが...
引用:

DataGRID1.CurrentPageIndex = e.NewPageIndex
DataGRID1.DataBind()   <==ここでエラーになってしまいます。


↑の前ではちゃんとDataGridのDataSourceへDataSet等の値をセットしてますよね!?
nodera
大ベテラン
会議室デビュー日: 2003/09/08
投稿数: 200
投稿日時: 2004-08-06 15:26
こんにちは。

たぶんですが、DataBindする前にDataSourceをセットしていないことが原因だと思われます。
Web用DataGridはページ切替時でも再度DataSourceに入れるデータを作り直してセットする必要があります。自分も最初「なに〜〜?」と思った記憶が。。。。

#かぶっちゃいました(^^;

[ メッセージ編集済み 編集者: nodera 編集日時 2004-08-06 15:27 ]
なぼな
ベテラン
会議室デビュー日: 2004/08/04
投稿数: 61
投稿日時: 2004-08-06 15:49
えんぞ@見習さん、noderaさんありがとうございます。

ソースは、
DataGRID.DataSource = DataSet11
DataGRID.CurrentPageIndex = e.NewPageIndex
DataGRID.DataBind()   <==ここでエラー
こんな感じです。
CurrentPageIndexには0が入っていて、NewPageIndexには1が入っています。

>Web用DataGridはページ切替時でも再度DataSourceに入れるデータを作り直してセットする必>要があります。自分も最初「なに〜〜?」と思った記憶が。。。。
私もそう思いました。また、どっかのサンプルでもDataSourceに入れていたので、
すでに、真似をしてみましたが、同じでした。

FILL() は不要ですよね?DataSetをDataSourceに再設定するだけですよね?

いろいろやって、CurrentPageIndexをいじらない
DataGRID.DataSource = DataSet11
DataGRID.DataBind()   <==もんだいなし
エラーは発生しないが、表示はなぜか変。
まぁ、ここの表示がおかしいのはおいておくことにします。

いろいろやって、
DataGRID.DataSource = DataSet11
DataGRID.DataBind()   <==もんだいなし
DataGRID.CurrentPageIndex = e.NewPageIndex
DataGRID.DataBind()   <==ここでエラー
という感じです。
やはりCuurentPageIndexをいじられるのがいやのようですね。
なんとなく、CurrentPageIndexの値とNewPageIndexの値が
デバッガ−で見えているのと実は違うのではないかと心配になってきました。
あとは、プロパティ類ですよね?
NAL-6295
ぬし
会議室デビュー日: 2003/01/26
投稿数: 966
お住まい・勤務地: 東京
投稿日時: 2004-08-06 15:54
引用:

DataGRID.CurrentPageIndex = e.NewPageIndex
DataGRID.DataBind()   <==ここでエラー



上の2行を逆にしたら幸せになれるかも・・・。

つまり・・・

引用:

DataGRID.DataSource = DataSet11
DataGRID.DataBind()   <==もんだいなし
DataGRID.CurrentPageIndex = e.NewPageIndex
DataGRID.DataBind()   <==ここでエラー




最後の1行が余分ってことです。

[ メッセージ編集済み 編集者: NAL-6295 編集日時 2004-08-06 15:58 ]
なぼな
ベテラン
会議室デビュー日: 2004/08/04
投稿数: 61
投稿日時: 2004-08-06 16:08
NAL-6295さん、ありがとうございます。

いただいたご意見通りやってみました。
エラーはなくなるのですが、表示がおかしくなります。
次ページの表示のつもりが、項目(列の見出し)だけになってしまいます。
データ行は1行も表示されません。

認識が間違っていたらごめんなさい。
マニュアル等で読んでいる感じでは次のように認識しています。
1.データのページ管理はDataGridが行っている。
2.設定されているDataSetから指定されたページに相当する部分を表示する
3.表示ページをCurrentIndexPageに設定し、DataBindで表示を行う
  (DataBindか、ReDisplayメソッドで、表示ページを参照するメソッド?)
となります。
ご指摘いただきました件、「もしや」と思いやってみましたが、
プロパティを変更したことによるメソッドが発生するような記述が
マニュアルに見つからないので、やはりDatabindは必要なのではないでしょうか?
あれ?ちょっとまってください!
表示がおかしくなるということは、トリガー的なメソッドが発生していることですよね?
ん〜、ということは何かが不足しているからでしょうか?

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