- PR -

GridViewのDataSourceにDataTableを設定するとページングができません

1
投稿者投稿内容
ちさも
会議室デビュー日: 2005/06/27
投稿数: 2
投稿日時: 2006-10-18 20:37
いつも参考にさせていただいております。
件名に挙げた問題について、相談させて下さい。

【環境】
.NET Framework2.0
Visual Studio 2005
ASP.NET 2.0
Oracle 10g

【実現すべき案件】
「検索条件/取得項目設定画面」にて
検索条件と取得項目、ソート順を指定します。
「検索結果一覧画面」で取得結果をGridViewを使って一覧表示します。

【問題】
SQL内で、一部条件をin句を用いて指定しますが
このin内での順番通りに検索結果を表示しなければなりません。
(order by句でソート順を指定できない)
解決方法として

 1)OracleClientを用いてSQLを実行する。
 2)検索結果をいったんDataTableに格納してからソート処理を行う。
 3)ソート実行後のDataTableをGridView.DataSourceに設定する。

の処理を行ったところ、
ページ移動の際にイベントがハンドルされていないとの例外が発生します。
おそらくは
http://vsug.jp/tabid/63/forumid/72/postid/4442/view/topic/Default.aspx
と同事象であると思います。

本事象の解決策について

 1)自力でページングを実装する、
 2)ObjectDataSource / SqlDataSource を使用して実装する
 3)その他

の方法があると思いますが、自力では解決できませんでした。
解決方法、またはそれに繋がるようなアイディアをいただければ有難いです。
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2006-10-18 23:32
カスタムページングの実装はこれが参考になると思います。
http://codezine.jp/a/article/aid/430.aspx
ちさも
会議室デビュー日: 2005/06/27
投稿数: 2
投稿日時: 2006-10-23 00:06
>どっとねっとふぁんさま
参考ページの御紹介、ありがとうございます。御礼が遅くなってすみません。
御紹介いただいたサイトと、@IT内のサイトを参照して
ObjectDataSourceを使用した実装に成功しそうです。

…が、別の問題に直面してしまいました。
何度も申し訳ありませんが、下記問題について相談させて下さい。

【現在の問題】
任意のテーブルに対して "select ColumnName01 as 列名01 from TableName" のように
別名(エイリアス)を指定して DataAdapter.Fill() を実行すると
以下のような例外が発生します。

 制約を有効にできませんでした。行に入力できるのは
 Null 以外の値、一意な値、あるいは外部キーですが
 この制約の違反が 1 つ以上の行で発生しています。

ただし、" as 列名01"の部分を削除すると正常に動作します。
" as 列名01"を" as Alias01"のように半角文字列のみにしても同様の例外が発生します。

ここ で挙げられているDataTableの(正確にはDataColumnの)各プロパティを作成中のPGで確認したところ
 AllowDBNull:True
 NullValue:(Empty)
 Unique:True…"ColumnName01"がテーブルの一意キーであるため、True固定らしい
となっています。

実際のDB上の列名は"AAAAAA"のようなID値になっているので、そのまま表示することができません。
DataColumnのColumnNameやGridViewのHeaderTextを地道に変更することは可能でしょうが
あまり好ましい処理ではないように思います。
別名を使用してクエリを実行する方法をご存知の方がいたら、ご教授いただけませんか?
1

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