2016-08-24 10 views
0

Я пытаюсь смешивать столбец в datagridview с двумя типами управления (флажок & TextBox), данные поступают из хранимой процедуры, которую я также пишу так У меня небольшая гибкость.DataGridView, Изменить ячейку типизированного столбца на другой тип

в хранимой процедуре Я возвращаю пустой столбец, чтобы действовать как столбец «Выбор» в GridView, но я сталкиваюсь с проблемами при попытке преобразовать ячейки в другой тип на основе критериев ......

Я держу проблема с типами данных при преобразовании между типами управления, я попытался alsort из Diferent способов преобразовать значение первого, контролирует первый, и т.д. и т.п., но ничего не работает 100% .....

в настоящее время у меня есть SP, возвращающий строку «False» в столбце, а затем используя это с критериями для создания флажка ..... он отлично работает, но значение остается sstring даже после преобразования его в Boolean, тип данных также булево на флажке, но значение «Строка» ..... это зашло над моей головой, и теперь я теряюсь ......

NewCntrl2 = New DataGridViewCheckBoxCell 
NewCntrl2.Value = Convert.ToBoolean(DGV.Cells(0).Value) 
NewCntrl2.ValueType = GetType(System.Boolean) 
DGV.Cells(0) = NewCntrl2 

это код преобразуя textboxcolumncell к CheckBox клетки

любые идеи, почему значение флажка по-прежнему строка («False») ...

Проблема с тем, что его делать теперь, когда я обрабатывать событие cellclick я не могу проверить или снимите флажок, используя метод «Не значение»

---- EDIT ----

Это вспомогательное устройство, которое я использую, оно создает несколько различных типов элементов управления.

Public Sub posted_CreateControls() 
    Dim Cell_0 As String 
    Dim Cell_1 As String 
    Dim Cell_2 As String 
    Dim NewCntrl As DataGridViewButtonCell 
    Dim NewCntrl2 As DataGridViewCheckBoxCell 

    For Each Rw As DataGridViewRow In dgvPosted.Rows 

     With Rw 

      Cell_0 = .Cells(1).Value.ToString 
      Cell_1 = .Cells(2).Value.ToString 
      Cell_2 = .Cells(3).Value.ToString 


      'this column starts with a value 'False' returned by the SP, 
      'we dont want checkboxes on all rows and using false string was the only method 
      'i could find to easily do this 
      'if both assign and unassign id are present then we need a checkbox 
      Select Case Cell_0 
       Case String.Empty 
        .Cells(0).Value = String.Empty 

       Case Else 
        If Not Cell_1 = String.Empty Then 
         NewCntrl2 = New DataGridViewCheckBoxCell 
         NewCntrl2.Value = Convert.ToBoolean(.Cells(0).Value) 
         NewCntrl2.ValueType = GetType(System.Boolean) 
         .Cells(0) = NewCntrl2 
        Else 
         .Cells(0).Value = String.Empty 
        End If 

      End Select 

      'Create an Assign button for each row in columnindex 0(Assign) if ColumnIndex(2)(Edit) contains M, L or I 
      Select Case Cell_2 
       Case "M", "L", "I", "P" 
        NewCntrl = New DataGridViewButtonCell 
        .Cells(1) = NewCntrl 
        NewCntrl.Tag = Cell_0 
        NewCntrl.Value = "Assign" 
      End Select 

      'Create an UnAssign button in columnindex 1(UnAssign) if the value of columnindex 1(Unassign) is not empty 
      If Not Cell_1 = vbNullString Then 
       NewCntrl = New DataGridViewButtonCell 
       .Cells(2) = NewCntrl 
       NewCntrl.Tag = Cell_1 
       NewCntrl.Value = "UnAssign" 
      End If 

      'Create an Edit button on columnindex 2(Edit) if ColumnIndex 2(Edit) is not M, L or empty string 
      Select Case Cell_2 
       Case "M", "L", "P", vbNullString 
        'Do Nothing 
       Case Else 
        NewCntrl = New DataGridViewButtonCell 
        .Cells(3) = NewCntrl 
        NewCntrl.Tag = Cell_2 
        NewCntrl.Value = "Edit" 
      End Select 
     End With 
    Next 

    NewCntrl = Nothing 
End Sub 

Это создает флажки, как я хочу их, но значения остаются в виде строки, которая вызывает событие cell.click на неудачу, потому что я пытаюсь установить значение флажка, чтобы верно и .Value = нет. значение часть терпит неудачу, потому что по какой-то причине значение остается строка, но тип флажков значение фактически Boolean .....

ответ

0

Вместо возвращения ложной попробовать возвращающегося:

`select CAST(0 as bit) as somefield` 

который будет возвращать логическое значение поле. Я бы также рекомендовал добавить столбец флажка вместо добавления отдельных ячеек.

+0

Я также пробовал это, но я столкнулся с проблемой, когда мне нужно удалить флажки из определенных строк ...... не все строки должны иметь их, и я попробовал разворот .. изменение ячейки флажка в ячейки текстового поля, но cann ' t найти способ предотвратить возникшую ошибку FormatValue. однако я не пробовал это с кодом, который я дал выше ... Я попробую его и посмотрю, работает ли он –

+0

. Я все еще иду с подходом к столбцу, обрабатываю событие cellformatting, чтобы отключить/включить любой из флажков/изменить стиль ячейки в обычную ячейку текстового поля. – FloatingKiwi

+0

Мне нужно, чтобы ячейки были полностью пустыми, это не стандартная таблица, которая заполнена здесь, и имеет пустые строки для разделения родительских строк, и каждая родительская строка имеет несколько дочерних строк, а также дочерние строки. однако не обращайте внимания на сложный характер таблицы, моя единственная проблема в том, что когда я меняю элемент управления ячейки на другой тип, его типы значений (хотя и изменяются) все еще сохраняют свое старое значение .... как можно ввести логическое значение, содержащее значение String? ....... никаких ошибок вообще, я думаю, что я что-то пропустил. –