C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: DataGridViewの追加行のチェックボックス列の制御


(過去ログ 126 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■75179 / inTopicNo.1)  DataGridViewの追加行のチェックボックス列の制御
  
□投稿者/ ケンシロウ (3回)-(2015/03/04(Wed) 17:03:38)

分類:[VB.NET/VB2005 以降] 

使用言語:VB2008

DataGridViewで行追加できるよう、AllowUserToAddRowsをTrueにしていますが、
グリッドの左に設けたDataGridViewCheckBoxColumnの列については、
グリッドの一番下の追加行(IsNewRow = True)となる行にチェックを入れられないようにすることは可能でしょうか?

チェックができても構わないのですが、チェックをつけると入力があったと判断され、
新たな空白行が生成されてしまうことを回避したい、というのが目的です。

アドバイスの程、何卒宜しくお願い申し上げます。
引用返信 編集キー/
■75181 / inTopicNo.2)  Re[1]: DataGridViewの追加行のチェックボックス列の制御
□投稿者/ shu (712回)-(2015/03/04(Wed) 17:18:51)
No75179 (ケンシロウ さん) に返信

行追加時に該当CellをReadOnlyにして、セル編集が行われたら解除

サンプルです。

    Private Sub DataGridView1_RowsAdded(sender As Object, e As System.Windows.Forms.DataGridViewRowsAddedEventArgs) Handles DataGridView1.RowsAdded
        Dim grow = DataGridView1.Rows(e.RowIndex)
        grow.Cells(0).ReadOnly = True
    End Sub

    Private Sub DataGridView1_CellValidated(sender As Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellValidated
        Dim grow = DataGridView1.Rows(e.RowIndex)
        If grow.Cells(0).ReadOnly Then
            grow.Cells(0).ReadOnly = False
        End If
    End Sub

引用返信 編集キー/
■75195 / inTopicNo.3)  Re[2]: DataGridViewの追加行のチェックボックス列の制御
□投稿者/ ケンシロウ (4回)-(2015/03/05(Thu) 16:45:58)
shu様、アドバイスありがとうございます。
頂いたサンプルで、ReadOnlyにすることができました。
ただ、あらかじめDataGridView.Rows.Addで初期データを追加しておく場合、
これらの行のチェックボックスもReadOnlyになってしまうため、
以下のようにアレンジしてみたところ、うまくいきました。


Private Sub dgv_RowsAdded(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewRowsAddedEventArgs)
    Dim dgv As DataGridView = sender
    Dim row As DataGridViewRow = dgv.Rows(e.RowIndex)
    row.Cells(チェックボックスのインデックス).ReadOnly = row.IsNewRow
End Sub

Private Sub dgv_CellValidated(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs)
    Dim dgv As DataGridView = sender
    Dim row As DataGridViewRow = dgv.Rows(e.RowIndex)
    Dim cel As DataGridViewCell = row.Cells(チェックボックスのインデックス)
    If Not row.IsNewRow AndAlso cel.ReadOnly Then
        cel.ReadOnly = False
    End If
End Sub

これで問題を解決することができました。
ありがとうございました。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -