タイトル | : DataGridView でデータを選択し削除する方法 |
記事No | : 4825 |
投稿日 | : 2007/01/17(Wed) 10:19 |
投稿者 | : やまもと |
環境: Visual Basic 2005
以下、サンプルコードです。
Form に DataGridView と Button を配置し、 以下のコードを貼り付けて、実行してみてください。
Public Class Form1
Dim table As New System.Data.DataTable
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' テーブルの作成 With table .Columns.Add("no", System.Type.GetType("System.Int16")) .Columns.Add("f1", System.Type.GetType("System.String")) .Columns.Add("f2", System.Type.GetType("System.String")) End With
' データの作成 table.Rows.Add(New Object() {1, "a", "x1"}) table.Rows.Add(New Object() {2, "b", "d2"}) table.Rows.Add(New Object() {3, "c", "c3"}) table.Rows.Add(New Object() {4, "d", "m4"})
' 作成したテーブル(データ)を DataGridView に表示 DataGridView1.DataSource = table
' DataGridView の設定 With DataGridView1 .AllowUserToAddRows = False .AllowUserToDeleteRows = False .AllowUserToResizeRows = False .MultiSelect = False .SelectionMode = DataGridViewSelectionMode.FullRowSelect .RowHeadersVisible = False .ReadOnly = True End With
' ボタン名の設定 Button1.Text = "削除"
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
' 選択行がない場合は処理を抜ける If DataGridView1.SelectedRows.Count = 0 Then Exit Sub
' 選択行のデータを削除 table.Rows.RemoveAt(DataGridView1.SelectedRows(0).Index)
End Sub
End Class
・ 4レコードのデータを DataGridView に表示 ・ データを選択 ・ 選択中のデータを削除 というものです。
基本的には、正常に動いているように見えますが、 たとえば、 f2 のカラムヘッダをクリックして ソートしてしまうと、 選択行ではない行が削除されてしまいます。 ( DataGridView 上はソートされますが、 DataTable 上はソートされていない?)
ソートした場合などに、 DataGridView で選択中のデータが DataTable 内のどのレコードなのかを知る方法はありますでしょうか?
※ちなみに、サンプルなので、カラム数が少ないですが、 実際にはもっと多くのカラムがあり、 また、ユニークとなるようなカラムはありません。
よろしくお願いいたします。
|