- PR -

DataGridでの新規データ一括登録について教えてください

投稿者投稿内容
とっと
大ベテラン
会議室デビュー日: 2004/03/25
投稿数: 197
投稿日時: 2004-08-23 01:22
 こんにちは、いつも勉強させていただいています。初歩的な質問ですいません。

 Winアプリ VB.netで開発中ですが、DataGridで質問があります。

 いくつかの画面でDataGridを使用しています。その中の画面の1つで新規データを複数件DataGridで入力して新規データとしてテーブルに一気に登録したいのですが、やり方が分かりません。

 更新の場合はDataAdapterのFillメソッドでDataSetを作成してDataGridで編集後DataAdapterのUpdateメソッドで更新していますが、新規データの場合はどうしたらよいのですか?具体的にはDataSetの作り方が分かりません。元のSQL文を指定してもレコードがないので・・・。

 他の画面では基本的に1件ずつの登録が多いので、ユーザーの希望もあり、DataGridの上部に新規入力欄を作成して登録ボタンでテーブルにレコードを登録してその後そのテーブルを呼び出してDataGridに表示させています。

 現在作成中の画面は複数件の新規データの登録が基本で、Excel等から100件単位のデータを読み込んでDataGridに表示させて一気に登録する機能もあり、質問させていただきました。どうかお知恵を拝借出来ます様、宜しくお願いします。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-08-23 06:22
ユーザがデータを入力する

ユーザデータをDataRowに格納する

上のDataRowを、DataTableにAddする

ユーザ指示を待つ(登録)

DataAdapter.InsertCommandを、適切に構築する

DataAdapter.Updateをコールする


という流れになりますが、どこで詰まっていますか?

##
 ユーザ希望が「1件ずつ」でも、テストでは大量のデータを用意しておかねばならず、また初期データの登録という問題もあるため、バッチ登録の機能は用意しておく方が、後々楽です。

[ メッセージ編集済み 編集者: Jitta 編集日時 2004-08-23 06:24 ]
とっと
大ベテラン
会議室デビュー日: 2004/03/25
投稿数: 197
投稿日時: 2004-08-23 08:23
おはようございます。Jittaさん、ご返信ありがとうございます。

>ユーザがデータを入力する

の前で詰まってます。DataGridコントロールが入力状態ではありません。更新や照会だとコマンドを実行して作成したDataSetをDataGridのデータソースにしてDataGrid上にデータを表示しますが、新規データの場合、元になるDataSetの作り方が解りません。取得するデータがなくてもコマンド文を発行してDataSetを定義するのでしょうか?

> ユーザ希望が「1件ずつ」でも、テストでは大量のデータを用意しておかねばならず、また >初期データの登録という問題もあるため、バッチ登録の機能は用意しておく方が、後々楽で >す。

そうですね。そうさせていただきます。

よろしくお願いいたします。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-08-23 08:46
引用:

とっとさんの書き込み (2004-08-23 08:23) より:

>ユーザがデータを入力する

の前で詰まってます。DataGridコントロールが入力状態ではありません。更新や照会だとコマンドを実行して作成したDataSetをDataGridのデータソースにしてDataGrid上にデータを表示しますが、新規データの場合、元になるDataSetの作り方が解りません。取得するデータがなくてもコマンド文を発行してDataSetを定義するのでしょうか?


 DataGridを、データの照会/更新/入力ではなく、入力のみの為に用いています?
 必要なのはDataTableです。空のDataTableを作って、バインドしてやれば、入力用の領域ができると思いますけど?
とっと
大ベテラン
会議室デビュー日: 2004/03/25
投稿数: 197
投稿日時: 2004-08-23 09:35
Jittaさん、ご返信ありがとうございます。

> DataGridを、データの照会/更新/入力ではなく、入力のみの為に用いています?

新規画面と編集画面があり、新規画面ではデータの入力に使用しています。

> 必要なのはDataTableです。空のDataTableを作って、バインドしてやれば、入力用の領域 >ができると思いますけど?

やってみます。あとはDataGridにデータを入力してコマンドを生成ですね。コマンドビルダーを使うとDataAdapter.InsertCommandも自動的に生成してくれるんでしょうかね。とりあえず試してみて結果報告させていただきます。
とっと
大ベテラン
会議室デビュー日: 2004/03/25
投稿数: 197
投稿日時: 2004-08-23 10:17
Jittaさん、すいません。

>空のDataTableを作って、バインドしてやれば、入力用の領域ができる

入力用の領域は出来ましたけど、行ヘッダしか出ません。

Dim dtSet As New DataSet("AAA")
Dim dtTable As DataTable

dtTable = dtSet.Tables.Add("T_BB")

Me.DataGrid.SetDataBinding(dtSet, "T_BB")

あと、DataGridのテーブルスタイルを定義したいのですが、DataGridTextBoxColumn等のMappingNameの指定の仕方が分かりません。お手数ですが、アドバイスをいただきたく、よろしくお願いします。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-08-23 11:21
 自分でやっているわけではないので間違っているかもしれませんが、ヘッダの下に、空白の行が1つありませんか?または、フォーカスを移すと出てきませんか?私が関わっていたプロジェクトでは、その追加の為の空白行を消せないか、四苦八苦していたのですが。。。?


 それから、コマンドビルダーは、MSDNにも書いてあると思いますけど、使わない方がいいです。データベース中のすべての項目が、DataRowと同じ値か調べるステートメントが生成されます。データ件数やデータ型によって、とてつもなく時間がかかります。
とっと
大ベテラン
会議室デビュー日: 2004/03/25
投稿数: 197
投稿日時: 2004-08-23 11:52
Jittaさん、ありがとうございます。

DataTableに列を追加して列名をMappingNameに指定すると入力欄が表示されました。

DataTable.Columns.Add("col1")
DataTable.Columns.Add("col2")

Dim TblStyle As New DataGridTableStyle
TblStyle.MappingName = "TableName"

    'コード
Dim txtCD As New DataGridTextBoxColumn
txtCD.MappingName = "col1"
txtCD.HeaderText = "コード"
txtCD.Width = 150
TblStyle.GridColumnStyles.Add(txtCD)

'名称
Dim txtNM As New DataGridTextBoxColumn
txtNM.MappingName = "col2"
txtNM.HeaderText = "名称"
txtNM.Width = 350
TblStyle.GridColumnStyles.Add(txtNM)

その後、DataTableに行を追加、データ入力を繰り返してDataGridに数件のデータが表示された状態なのですが、このデータをテーブルに反映したいのです。

>コマンドビルダーは、MSDNにも書いてあると思いますけど、使わない方がいいです。

とありますがDataTableの内容からDataAdapter.InsertCommandを適切に構築するにはどのような方法が最も適切であると思われますか?

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