VB.NetのDataGridViewコントロールに新しいレコードを追加するにはどうすればよいですか?
データセットまたはデータベースバインドを使用しません。 3つのフィールドを持つ小さなフォームがあり、ユーザーが[OK]をクリックすると、新しい行としてDataGridViewコントロールに追加されます。
グリッドの最後に行を追加する場合は、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)
コードでデータセット/データテーブルを構築し、それにグリッドをバインドする必要があると思います。
Bindingsourceを使用したdatagridviewからデータソースをキャストしようとすると、エラーアコーはキャストできません。
- - - - - 溶液 - - - - - -
'datagridviewにバインドするbindingsourceからキャストを変更しました
'ここにコード
Dim dtdata As New DataTable()
dtdata = CType(bndsData.DataSource, DataTable)
探している関数は「挿入」です。パラメータとして、挿入するインデックスと、新しい行の値に使用する値の配列を受け取ります。典型的な使用法は次のとおりです。
myDataGridView.Rows.Insert(4,new object[]{value1,value2,value3});
またはその効果のための何か。
DataGridView
がDataSet
にバインドされている場合、DataGridView
ディスプレイに新しい行を追加することはできません。これで正常に動作するようになります。
代わりに、次のコードでDataSet
に新しい行を追加する必要があります。
BindingSource[Name].AddNew()
このコードは、DataGridView
ディスプレイに新しい行を自動的に追加します。
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に設定し、作業を行ってから、元の値にリセットします。