tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル 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 内のどのレコードなのかを知る方法はありますでしょうか?

※ちなみに、サンプルなので、カラム数が少ないですが、
  実際にはもっと多くのカラムがあり、
  また、ユニークとなるようなカラムはありません。

よろしくお願いいたします。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。