web-dev-qa-db-ja.com

VB.NetのDataGridViewにレコードを追加するにはどうすればよいですか?

VB.NetのDataGridViewコントロールに新しいレコードを追加するにはどうすればよいですか?

データセットまたはデータベースバインドを使用しません。 3つのフィールドを持つ小さなフォームがあり、ユーザーが[OK]をクリックすると、新しい行としてDataGridViewコントロールに追加されます。

13
John

グリッドの最後に行を追加する場合は、RowsコレクションのAdd()メソッドを使用します...

DataGridView1.Rows.Add(New String(){Value1, Value2, Value3})

特定の位置に行を挿入する場合は、RowsコレクションのInsert()メソッドを使用します(GWLlosaも述べています)...

DataGridView1.Rows.Insert(rowPosition, New String(){value1, value2, value3})

データバインディングを行っていないことを述べましたが、プロジェクトで単一のデータテーブルを使用して厳密に型指定されたデータセットを定義した場合、グリッドメソッドに依存するのではなく、それを使用してニースの厳密に型指定されたメソッドを取得できます...

DataSet1.DataTable.AddRow(1, "John Doe", true)
28
codeConcussion

コードでデータセット/データテーブルを構築し、それにグリッドをバインドする必要があると思います。

4
Galwegian

Bindingsourceを使用したdatagridviewからデータソースをキャストしようとすると、エラーアコーはキャストできません。

- - - - - 溶液 - - - - - -

'datagridviewにバインドするbindingsourceからキャストを変更しました

'ここにコード

Dim dtdata As New DataTable()

dtdata = CType(bndsData.DataSource, DataTable)
2
Mr.Buntha Khin

探している関数は「挿入」です。パラメータとして、挿入するインデックスと、新しい行の値に使用する値の配列を受け取ります。典型的な使用法は次のとおりです。

myDataGridView.Rows.Insert(4,new object[]{value1,value2,value3});

またはその効果のための何か。

1
GWLlosa

DataGridViewDataSetにバインドされている場合、DataGridViewディスプレイに新しい行を追加することはできません。これで正常に動作するようになります。

代わりに、次のコードでDataSetに新しい行を追加する必要があります。

BindingSource[Name].AddNew()

このコードは、DataGridViewディスプレイに新しい行を自動的に追加します。

0
Robert

DataSetを使用せずに、ダム配列よりも記述的なものを使用したい場合は、以下が役に立つかもしれません。まだ強く型付けされていませんが、少なくともコンパイラーによってチェックされ、リファクタリングの処理は非常にうまくいきます。

Dim previousAllowUserToAddRows = dgvHistoricalInfo.AllowUserToAddRows
dgvHistoricalInfo.AllowUserToAddRows = True

Dim newTimeRecord As DataGridViewRow = dgvHistoricalInfo.Rows(dgvHistoricalInfo.NewRowIndex).Clone

With record
    newTimeRecord.Cells(dgvcDate.Index).Value = .Date
    newTimeRecord.Cells(dgvcHours.Index).Value = .Hours
    newTimeRecord.Cells(dgvcRemarks.Index).Value = .Remarks
End With

dgvHistoricalInfo.Rows.Add(newTimeRecord)

dgvHistoricalInfo.AllowUserToAddRows = previousAllowUserToAddRows

ユーザーがAllowUserToAddRows権限を持っている必要があります。そうしないと機能しません。そのため、既存の値を保存し、trueに設定し、作業を行ってから、元の値にリセットします。

0
cjbarth