指定したセルの編集を出来ないようにする
グリッドのすべてのセルを編集不可にする
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
今回利用したサンプル
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
- 公開