- PR -

GridViewの編集中のDataSourceをとりたい

投稿者投稿内容
island_town
ベテラン
会議室デビュー日: 2007/05/08
投稿数: 77
投稿日時: 2007-05-08 17:23
やってみます。ありがとうございます。
island_town
ベテラン
会議室デビュー日: 2007/05/08
投稿数: 77
投稿日時: 2007-05-09 16:51
やってみたのですが
ObjectDataSourceにDataTableのPrivateフィールドを作っても
メソッドを呼び出すたびにnullになります。
Selectメソッドを呼び出した後Updateメソッドを呼び出しても同じです。

またSessionにDataTableを放り込み
ボタン押下時にSessionより取得してObjectDataSourceの外で更新しても
GridViewには反映されません。

この方法はだめなのでしょうか。
island_town
ベテラン
会議室デビュー日: 2007/05/08
投稿数: 77
投稿日時: 2007-05-09 17:18
SqlDataSourceを使ってDataTableをSessionに入れ
Sessionより取得して編集行を更新してデータ行をAddして
GridViewのDataSourceにセットしDataBindすれば
追加・編集ができることは確認しました。

[ メッセージ編集済み 編集者: island_town 編集日時 2007-05-09 17:20 ]

[ メッセージ編集済み 編集者: island_town 編集日時 2007-05-09 17:22 ]
island_town
ベテラン
会議室デビュー日: 2007/05/08
投稿数: 77
投稿日時: 2007-05-09 18:38
ObjectDataSource用のClassそのものを
イベントのObjectCreatingとObjectDisposingで
Sessionから取得・格納して
Classの中にDataTableのPrivateフィールドを入れ
初めはそこに保存し次回からはそこから取得したところ
DateTableにちゃんと値が入っていることを確認しました。
更新の仕方は
http://dotnetfan.org/blogs/dotnetfanblog/default.aspx
に載っていました。
でaspxのPrivateフィールドとしてObjectDataSourceのClassを保持しておいて
そのClassにDataTable取得関数を作り
取得したDataTableに行をAddしたところ
GridViewに編集・追加して表示されました。

あとはDBへの保存ですが
明日試すことにします。
island_town
ベテラン
会議室デビュー日: 2007/05/08
投稿数: 77
投稿日時: 2007-05-10 11:16
DBへの保存は変更または追加のあった行のみ
申請テーブルへ内容を追加するのですが
型付データセットがDateTimeやintでnullを入れられないため
TableAdapterではなくDataSetにQueryを定義して
保存ボタンでObjectDataSourceのClassのDataTableをループしながら
QueryTableAdapterを実行する方法を取ったところ
うまく行きました。
ありがとうございました。
choir
会議室デビュー日: 2006/07/31
投稿数: 15
お住まい・勤務地: 東京都
投稿日時: 2007-05-10 12:11
引用:
型付データセットがDateTimeやintでnullを入れられないため


[型付データセット].[テーブル名][行番号].[列名] = null が出来ないという意味であれば
[型付データセット].[テーブル名][行番号].Set列名Null()
こんなメソッドが自動生成されていると思いますが。
それが無いなら、対象の列にNull不許可の定義をしてしまっているかですね。
island_town
ベテラン
会議室デビュー日: 2007/05/08
投稿数: 77
投稿日時: 2007-05-10 12:20
知りませんでした。とても役に立ちます。
ありがとうございます。
island_town
ベテラン
会議室デビュー日: 2007/05/08
投稿数: 77
投稿日時: 2007-05-10 13:40
QueryTableAdapterでInsertすると
DataRowのフィールドを引数に渡すとき
Nullだとエラーになるので
DataSetデザインで
TableAdapterにUpdateCommandとInsertCommandを作り
保存ボタン押下時にDataTableをループしながら
判断しながらDataRowにIDを入れ
TableAdapterにDataRowを渡したところ
成功しました。
お世話になりました。

[ メッセージ編集済み 編集者: island_town 編集日時 2007-05-10 13:47 ]

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