指定したセルの編集を出来ないようにする

グリッドのすべてのセルを編集不可にする

  		C1TrueDBGrid1.AllowUpdate = False

特定のセルを編集不可にする

この場合、編集モードに入る直前に発生するBeforeColEditイベントを利用し、Cancel引数をTrueにします。Cancel引数をTrueにすると編集モードへ移行せず、編集出来なくなります。
下の例では1行目の得意先コード列を編集不可にしています。

  	 Private Sub C1TrueDBGrid1_BeforeColEdit( _
            ByVal sender As Object, _
            ByVal e As C1.Win.C1TrueDBGrid.BeforeColEditEventArgs) _
            Handles C1TrueDBGrid1.BeforeColEdit
        
        If (C1TrueDBGrid1.Row = 0) And _
            (e.Column.DataColumn.DataField = "得意先CD") Then
            e.Cancel = True
        End If
        
    End Sub

特定の行や列を編集不可にする

列の場合は簡単です。以下ではLockedプロパティをTrueに設定し、得意先コード列を編集不可にしています。

  	 C1TrueDBGrid1.Splits(0).DisplayColumns("得意先コード").Locked = True

行の場合は前述したBeforeColEditイベントを利用し制御します

 Private Sub C1TrueDBGrid1_BeforeColEdit( _
            ByVal sender As Object, _
            ByVal e As C1.Win.C1TrueDBGrid.BeforeColEditEventArgs) _
            Handles C1TrueDBGrid1.BeforeColEdit

        If RadioButton2.Checked Then
            If (C1TrueDBGrid1.Row = 0) And _
                (e.Column.DataColumn.DataField = "得意先コード") Then
                e.Cancel = True
            End If

        ElseIf RadioButton5.Checked Then
            If (C1TrueDBGrid1.Row = 2) Then
                e.Cancel = True
            End If
        End If
    End Sub
	

今回利用したサンプル

指定したセルの編集を出来ないようにする (TrueDBGrid TIPS)


 Public Class frmGrid3

    Private dt As DataTable = Nothing

    ''' 
    ''' サンプルデータ作成
    ''' 
    ''' 
    Private Sub initializeData()

        Dim i As Integer
        Dim drow As DataRow

        dt = New DataTable
        dt.Columns.Add("No", GetType(Integer))
        dt.Columns.Add("得意先コード", GetType(Integer))
        dt.Columns.Add("得意先名", GetType(String))

        For i = 1 To 100
            drow = dt.NewRow
            drow(0) = i
            drow(1) = i + 1000
            drow(2) = "得意先 " & Format(CInt(drow(1)), "0000")
            dt.Rows.Add(drow)
        Next

        C1TrueDBGrid1.SetDataBinding(dt, "", True)

    End Sub

    ''' 
    ''' TrueDBGridの初期設定
    ''' 
    ''' 
    Private Sub initializeGrid()

        C1TrueDBGrid1.RowHeight = 18
        C1TrueDBGrid1.AlternatingRows = True
        C1TrueDBGrid1.EvenRowStyle.BackColor = Color.AliceBlue

    End Sub

    Private Sub frmGrid3_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        initializeGrid()    'TrueDBGridの初期設定
        initializeData()    'サンプルデータ作成

    End Sub

    Private Sub RadioButton_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles _
                RadioButton1.CheckedChanged, RadioButton2.CheckedChanged, _
                RadioButton3.CheckedChanged, RadioButton4.CheckedChanged, _
                RadioButton5.CheckedChanged

        C1TrueDBGrid1.AllowUpdate = True
        If C1TrueDBGrid1.Splits(0).DisplayColumns.Count > 0 Then
            C1TrueDBGrid1.Splits(0).DisplayColumns("得意先コード").Locked = False
        End If

        If RadioButton2.Checked Then
            'すべてのセルを編集不可
            C1TrueDBGrid1.AllowUpdate = False
        ElseIf RadioButton4.Checked Then
            '得意先コード列を編集不可
            If C1TrueDBGrid1.Splits(0).DisplayColumns.Count > 0 Then
                C1TrueDBGrid1.Splits(0).DisplayColumns("得意先コード").Locked = True
            End If
        End If
    End Sub

    Private Sub C1TrueDBGrid1_BeforeColEdit( _
            ByVal sender As Object, _
            ByVal e As C1.Win.C1TrueDBGrid.BeforeColEditEventArgs) _
            Handles C1TrueDBGrid1.BeforeColEdit

        If RadioButton3.Checked Then
            '1行目の得意先コード列を編集不可
            If (C1TrueDBGrid1.Row = 0) And _
                (e.Column.DataColumn.DataField = "得意先コード") Then
                e.Cancel = True
            End If

        ElseIf RadioButton5.Checked Then
            '3行目を編集不可
            If (C1TrueDBGrid1.Row = 2) Then
                e.Cancel = True
            End If
        End If
    End Sub

End Class
	

履歴

2011/11/06
公開
Loading