C1FlexGrid — изменение поведения выделения для диапазона ячеек

Мой сценарий:

У меня есть C1FlexGrid с заголовками столбцов и строк. Кроме того, первая строка C1FlexGrid является логической строкой (флажками). В зависимости от состояния этих флажков желаемый эффект — отключение ячеек для этого столбца. Сложность заключается в том, что из-за того, что первая строка является логическим типом данных, который нельзя отключать, использование свойства .Cols(index).AllowEditing невозможно. Я уже успешно реализовал обходной путь, используя обработчик событий BeforeEdit, чтобы запретить изменения в ячейках в столбце, а также CellStyle, чтобы сделать ячейки серыми, когда они отключены.

Private Sub C1FlexGrid1_BeforeEdit(ByVal sender As Object, ByVal e As C1.Win.C1FlexGrid.RowColEventArgs) Handles C1FlexGrid1.BeforeEdit
    If e.Row > 1 And Me.C1FlexGrid1.Item(1, e.Col) = False Then e.Cancel = True
End Sub

Private Sub C1FlexGrid1_AfterEdit(ByVal sender As Object, ByVal e As C1.Win.C1FlexGrid.RowColEventArgs) Handles C1FlexGrid1.AfterEdit
    If e.Row = 1 And Me.C1FlexGrid1.Item(1, e.Col) = False Then
        Call FormatColAsDisabled(e.Col)
    ElseIf e.Row = 1 And Me.C1FlexGrid1.Item(1, e.Col) = True Then
        Call FormatColAsEnabled(e.Col)
    End If
End Sub

Private Sub FormatColAsDisabled(ByVal col As Integer)
    Dim color As C1.Win.C1FlexGrid.CellStyle
    color = Me.C1FlexGrid1.Styles.Add("Gray")
    color.BackColor = Drawing.Color.Gray

    For row As Integer = 2 To Me.C1FlexGrid1.Rows.Count - 1
        Me.C1FlexGrid1.SetCellStyle(row, col, color)
    Next
End Sub

Private Sub FormatColAsEnabled(ByVal col As Integer)
    For row As Integer = 2 To Me.C1FlexGrid1.Rows.Count - 1
        Me.C1FlexGrid1.SetCellStyle(row, col, Me.C1FlexGrid1.Styles("Normal"))
    Next
End Sub

Мой вопрос

Есть ли способ изменить поведение «Выделить» только для этих ячеек, чтобы отключенные ячейки вообще не выделялись?


person Andy W    schedule 13.07.2015    source источник


Ответы (1)


Чтобы избежать выделения отключенных ячеек, вы можете установить для события Cancel EventArgs of BeforeSelChange значение true, если новая выбранная ячейка является отключенной.

Private Sub C1FlexGrid1_BeforeSelChange(sender As Object, e As RangeEventArgs) Handles C1FlexGrid1.BeforeSelChange
    If e.NewRange.r1 > 1 And Me.C1FlexGrid1.GetCellCheck(1, e.NewRange.c1) = CheckEnum.Unchecked Then
        e.Cancel = True
    End If
End Sub
person Akshay    schedule 11.09.2015