- PR -

ページ内で複数DataGridの編集後、一括更新したい

1
投稿者投稿内容
ひなた
会議室デビュー日: 2003/08/29
投稿数: 7
投稿日時: 2003-09-04 20:46
こんばんわ。

1ページ内に複数のDataGridを作成し、DataGrid_EditCommandを使用して、データを更新(このときはデータベースに反映したくないのです。)、その後、複数のDataGridを更新し、

ページ内にある
”データベースに書き込み!”なるボタンにて複数のDataGridのデータを一括に更新したいのですが、こういうことって技術的に可能なのでしょうか?

ご教授、宜しくお願いいたします。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-09-05 08:41
 可能です。・・・だけでいいのでしょうか?

 「データベースに書き込み!」ボタンでサーバに制御が戻ってきますから(って、ASP.NETですよね?)、そのときに2つのDataGridにバインドしているテーブルなりデータセットを、DataAdapter経由でUpdateします。・・・でいいですか?

 DataGridを修正しても、データベースには反映されていません、念のため。
ひなた
会議室デビュー日: 2003/08/29
投稿数: 7
投稿日時: 2003-09-05 16:57
Jittaさん、ご返答ありがとうございます。

UpdateCommand内で、以下のようなコードを書いていますが、どうもうまくいきません。
オブジェクト参照がオブジェクト インスタンスに設定されていません。というエラーが表示されてしまいます。

'データセット内のデータを更新
dataset.Tables("Table").Rows(dataGrid.EditItemIndex).Item("Item") = "Data"
BindDataGrid

Private Sub BindDataGrid()
With dataGrid
.DataSource = dataset.Tables("Table")
.DataBind()
    End With
End Sub

Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-09-08 09:39
引用:

ひなたさんの書き込み (2003-09-05 16:57) より:

UpdateCommand内で、以下のようなコードを書いていますが、どうもうまくいきません。
オブジェクト参照がオブジェクト インスタンスに設定されていません。というエラーが表示されてしまいます。


 このエラーの意味は理解されていますか?
 おそらく、
dataset.Tables("Table").Rows(dataGrid.EditItemIndex).Item("Item") = "Data"
この行で発生していると思いますが、この行にブレークポイントをつけ、デバッグ実行して止まったらdatasetをポイントしてみてください。nothingではないですか?datasetを、クラス変数にしていても、Webアプリケーションではイベントが発生するごとに新しいインスタンスが作られるので、クラス変数が初期化されてしまいます。イベントを通して保持しておきたい値は、Session変数か、Application変数に格納しなければなりません。または、ビューステートに入れ込むか。そのように修正してみてください。
ひなた
会議室デビュー日: 2003/08/29
投稿数: 7
投稿日時: 2003-09-10 22:29
Jittaさん、ご返信ありがとうございます。
すみません私、初心者なのもので・・・。

データをロードした時に
Session("Dataset") = Dataset
として、データセットのセッションを作成しました。

その後、データのUpdateCommand内で
Dim dtbl As DataTable
Dim drow As DataRow

dtbl = Session("Dataset").Tables("Table")

drow = dtbl.Rows(e.Item.ItemIndex)

drow("Item_Name") = MyDropDownList.SelectedItem.Value

Dim cb As New SqlCommandBuilder(objSQLDa)
objSQLDa.Update(Dataset, "Table")

With dgForVersion
.DataSource = Dataset.Tables("Table")
.DataBind()
End With

としているのですが、どうしてもデータが反映された形でグリッドに表示されません。

やりたいことは以下です。
1ページ内に2つのDataGrdをおき、編集、更新、キャンセルボタンを使用してグリッドの編集を行います。編集項目はDropDownListにて変更します。

その後、2つのグリッドの編集終了後にデータベースに書き込みボタンで2つのテーブルの変更
をデータベースに変更する。というものです。

また、項目をDropDownListに変更する際に、ItemCreatedイベントを使用しているのですが、
どちらのグリッドの編集ボタンを押しても、2つのグリッドのItemCreatedイベントが発生してしまうのは、仕様なのでしょうか?

長々とすみません、ご教授おねがいいたします。


Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-09-11 11:37
ん〜?このソース、丸ごと持ってきました?それとも、端折っています?

 CommanBuilderを使われていますが、ちゃんとUpdateCommandは生成されていますか?何度かここの会議室でも、「どうやって使うの?」という質問がありましたよ?それで、CommandBulderがコマンドを生成する条件は、
・DataAdapterのSelectCommandが生成されていること
・単一テーブルからの問い合わせであること
ですが、満足していますか?引用されているソースからは、その辺がわからないので。
1

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