DOBON.NET DOBON.NETプログラミング掲示板過去ログ

DataGridViewのCheckBoxの値の取得

環境/言語:[Vista、VB2008]
分類:[.NET]

こんにちわ。いきなりですが質問があります。

DataGirdViewにデザイナ上からCheckBoxを0列目に追加しています。
しかし値を取得しようと、

dgv(0,0).Valueとすると、Nothingが返ってきます。

いろいろ調べましたが、見当もつかないのでご教授ください。

よろしくお願いします。
■No27271に返信(こーじろーさんの記事)
> dgv(0,0).Valueとすると、Nothingが返ってきます。
質問文からは、何を問題としているのかが読み取れなかったのですが、
チェックをつけようと外そうとも、常に Nothing が返されるという
意味なのでしょうか。それとも、ある特定のイベントでそのコードを
実行すると、Nothing が返されてしまうという状況なのでしょうか。

> いろいろ調べましたが、見当もつかないのでご教授ください。
現象を再現できるコードを提示できますか?
■No27272に返信(魔界の仮面弁士さんの記事)
> ■No27271に返信(こーじろーさんの記事)
>>dgv(0,0).Valueとすると、Nothingが返ってきます。
> 質問文からは、何を問題としているのかが読み取れなかったのですが、
> チェックをつけようと外そうとも、常に Nothing が返されるという
> 意味なのでしょうか。それとも、ある特定のイベントでそのコードを
> 実行すると、Nothing が返されてしまうという状況なのでしょうか。
>
>>いろいろ調べましたが、見当もつかないのでご教授ください。
> 現象を再現できるコードを提示できますか?


さっそくの返信ありがとうございます。

お察しの通り、チェックを付けても外しても常にNothingが返ってくる状態です。

以下にコードを提示します。

Private Sub btnCopy_DoubleClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCopy.DoubleClick

Try

MsgBox(dgv1(0, 0).Value)

Catch ex As Exception
MsgBox(ex.Message)
End Try

End Sub

問題なのはメッセージボックスの中の値です。

よろしくお願いします。
■No27273に返信(こーじろーさんの記事)
dgv1(0, 0)
=> dgv1(1, 0)
はどうでしょう?
■No27273に返信(こーじろーさんの記事)
> Handles btnCopy.DoubleClick
Button の DoubleClick とは、珍しい実装ですね。
通常のボタンだと、DoubleClick は無効化されているはずなのですけれども。


>>> dgv(0,0).Valueとすると、Nothingが返ってきます。
> MsgBox(dgv1(0, 0).Value)
> 問題なのはメッセージボックスの中の値です。
No27272 の繰り返しになりますが、現象を再現できるコードを提示してみてください。

このコードでは、.Value が Nothing なのか "" なのか判断できませんよね。
また、dgv1 のデザイナ設定はどのようになっているのでしょうか。
(特に、データバインドの有無や DataGridViewCheckBoxColumn の設定など)


Partial Public Class Form1
    Inherits Form
    Private WithEvents btnCopy As Button
    Private WithEvents dgv1 As DataGridView
    Private WithEvents col1 As DataGridViewCheckBoxColumn
    Private Sub Form1_Load() Handles Me.Load
        col1 = New DataGridViewCheckBoxColumn()
        col1.TrueValue = True
        col1.FalseValue = False
        col1.ThreeState = True
        col1.ValueType = GetType(Boolean?)
        col1.HeaderText = "CHK"

        dgv1 = New DataGridView() With {.Dock = DockStyle.Fill}
        dgv1.AllowUserToAddRows = False
        dgv1.Columns.Add(col1)
        dgv1.RowCount = 6

        btnCopy = New Button() With {.Text = "Copy", .Dock = DockStyle.Top}
        Controls.AddRange(New Control() {dgv1, btnCopy})

        'dgv1(0, 0).Value = 未設定
        dgv1(0, 1).Value = Nothing
        dgv1(0, 2).Value = DirectCast(Nothing, Boolean?)
        dgv1(0, 3).Value = False
        dgv1(0, 4).Value = True
        dgv1(0, 5).Value = DBNull.Value
        ActiveControl = btnCopy
    End Sub

    Private Sub btnCopy_Click() Handles btnCopy.Click
        Dim list As New List(Of String)()
        For r = 0 To 5
            Dim o = dgv1(0, r).Value
            Dim s = String.Format("{0}行目:「{1}」({2})", r, o, TypeName(o))
            list.Add(s)
        Next
        MsgBox(Join(list.ToArray(), vbNewLine))
    End Sub
End Class

DOBON.NET | プログラミング道 | プログラミング掲示板