C1FlexGrid получить значение из ячейки флажок - PullRequest
0 голосов
/ 28 мая 2018

У меня есть ComponentOne FlexGrid, который заполнен DataTable.Каждый столбец DataTable имеет свой собственный столбец, назначенный в этой сетке, но есть дополнительный столбец (объявленный в Designer), настроенный как ячейки с флажками (тип boolean), и пользователь выберет значения после.

Я заполняюсетка с циклом for:

With My_StoreProcedure()
     For I As Integer = 1 To .Rows.Count()
            gridDates.Item(I, cPatron)= .Rows(I - 1).Item("patron")
            gridDates.Item(I, cColumn2)= .Rows(I - 1).Item("anothercolum2")
            gridDates.Item(I, cColumn3)= .Rows(I - 1).Item("anothercolum3")
            [..other 3 columns more...]
     Next I

Затем пользователь выбирает флажки из полученного результата сетки, нажимая кнопку «Получить», которая вызывает метод, содержащий другой цикл, у меня есть этот внутренний цикл, чтобы получить значение:

With gridDates
     For I As Integer = 1 To .Rows.Count() - 1
              'Dim celda As Object = gridDates.Item(I, 8)
              'Here it is where it doesn't work:
              Dim value As C1.Win.C1FlexGrid.CheckEnum = .GetCellCheck(I, columnwithCheck)
                 If value = C1.Win.C1FlexGrid.CheckEnum.TSChecked Then
                        Dim patron As String = gridDates.Item(I, 1).ToString 
                        Dim value2 As String = gridDates.Item(I, 2).ToString
                        Dim value3 As Char = CChar(gridDates.Item(I, 3)) 
                        [some other values...]

                        StoreSave(patron, value2, value3, ...)
                 End If
      Next I
End With

Я установил точку останова и обнаружил, что я получаю пустой объект, он не получает текущее значение какого-либо флажка.

Как я могу получить это значение надлежащим образом?

Редактировать: я только что добавил сгенерированный код, связанный с сеткой в ​​Designer:

    '
    'gridDates
    '
    Me.gridDates.AllowDragging = C1.Win.C1FlexGrid.AllowDraggingEnum.None
    Me.gridDates.AllowFreezing = C1.Win.C1FlexGrid.AllowFreezingEnum.Both
    Me.gridDates.AllowResizing = C1.Win.C1FlexGrid.AllowResizingEnum.None
    Me.gridDates.AllowSorting = C1.Win.C1FlexGrid.AllowSortingEnum.None
    Me.gridDates.ColumnInfo = resources.GetString("gridDates.ColumnInfo")
    Me.gridDates.ExtendLastCol = True
    Me.gridDates.KeyActionEnter = C1.Win.C1FlexGrid.KeyActionEnum.MoveAcross
    Me.gridDates.Location = New System.Drawing.Point(12, 104)
    Me.gridDates.Name = "gridDates"
    Me.gridDates.Rows.Count = 500
    Me.gridDates.Rows.DefaultSize = 19
    Me.gridDates.SelectionMode = C1.Win.C1FlexGrid.SelectionModeEnum.Row
    Me.gridDates.Size = New System.Drawing.Size(742, 261)
    Me.gridDates.StyleInfo = resources.GetString("gridDates.StyleInfo")
    Me.gridDates.TabIndex = 1

Ответы [ 3 ]

0 голосов
/ 07 июня 2018

Попробуйте удалить с помощью / End With, добавьте имя вашей сетки во все области, начиная с .something.Это означает, что проблемная строка будет иметь следующий вид:

Dim value As C1.Win.C1FlexGrid.CheckEnum = gridDates.GetCellCheck(I, columnwithCheck)

Убедитесь, что gridDates в строке выше является фактическим экземпляром, который вы отображаете для пользователя.

Также убедитесь, что columnwithCheck является целым числом и является правильным столбцом.

Дайте мне знать, что происходит.

0 голосов
/ 11 июня 2018

Вы должны установить проверенное значение ячейки в несвязанной сетке следующим образом:

gridDates.SetCellCheck(rowIndex, columnIndex, checkEnum)

Только тогда вы можете получить доступ к значениям позже с помощью GetCellCheck.Используйте этот код в этом случае:

If gridDates.GetCellCheck(I, columnwithCheck) = C1.Win.C1FlexGrid.CheckEnum.TSChecked Or gridDates.GetCellCheck(I, columnwithCheck) = C1.Win.C1FlexGrid.CheckEnum.Checked Then
   ' When Checked
ElseIf gridDates.GetCellCheck(I, columnwithCheck) = C1.Win.C1FlexGrid.CheckEnum.TSUnchecked Or gridDates.GetCellCheck(I, columnwithCheck) = C1.Win.C1FlexGrid.CheckEnum.Unchecked Then
   ' When Unchecked
Else
   ' Other state
End If

Однако в вашем случае вы установили логическое значение для ячейки.В этом случае вы должны получить значение ячейки и выполнить условную проверку с логическим значением

If gridDates.Item(I, columnwithCheck) = True Then
   ' When Checked
ElseIf gridDates(I, columnwithCheck) = False Then
   ' When Unchecked
Else
   ' This won't be reachable
End If
.
0 голосов
/ 06 июня 2018

Запустите это для каждого или, более предпочтительно, циклически, затем присвойте результаты любому формату, который вам нужен.

CheckBox.Checked = _checkResult

...