タイトル : DataGridView でデータを選択し削除する方法 投稿日 : 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 内のどのレコードなのかを知る方法はありますでしょうか? ※ちなみに、サンプルなので、カラム数が少ないですが、 実際にはもっと多くのカラムがあり、 また、ユニークとなるようなカラムはありません。 よろしくお願いいたします。 |