2016-08-24 41 views
0

DataGridViewの列を2つのコントロールの種類(チェックボックス& TextBox)と混在させようとしていますが、そのデータは、私は少し柔軟性があります。DataGridView、型指定された列のセルを別の型に変更する

ストアドプロシージャでGridViewで「選択」列として機能する空の列を返しますが、条件に基づいて他の種類にセルを変換しようとすると問題が発生しています......

私は問題を保つにはコントロールタイプ間の変換、私は最初の値を変換するdiferent方法のalsortを試してみました際のデータ型であり、最初の制御、などなど何も.....

を100%に作業していません現在のところ、私はSPの列に 'False'の文字列を返すし、チェックボックスを作成するための条件でこれを使用して.....それは正常に動作しますが、値はブール値に変換した後でもsstringのままです。また、ブールチェックボックスではなく、値が「文字列」である.....これが今の私の頭の上に行っていると私は途方に暮れてよ......

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

これは変換するコードです...チェックボックスセル

チェックボックスの値がまだ(「偽」)文字列である理由の任意のアイデアに

その私はcellclickイベントを処理するとき、私は確認することはできませんされて、今やって何に問題があることをtextboxcolumncell '値ではない'手法を使用してチェックボックスをオフにする

---- 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 

これは私がそれらをしたいどのようにチェックボックスを作成しますが、値は私がtrueにチェックボックスの値と.VALUE =いないを設定しようとしているので、失敗するcell.clickイベントを引き起こしている文字列として残ります。何らかの理由で値が文字列のままであるが、チェックボックスの値の型が実際ブールであるため、値の一部は、代わりに戻って偽の試みを返すので.....

答えて

0

を失敗している:

ブール値を返します
`select CAST(0 as bit) as somefield` 

フィールド。また、個々のセルを追加する代わりに、チェックボックスの列を追加することをお勧めします。

+0

また、私は特定の行からチェックボックスを削除する必要があるときに問題を見つけました......すべての行がそれらを持っているはずではなく、反転を試みました..チェックボックスのセルをテキストボックスのセルに変更しましたが、その原因となるFormatValueエラーを防止する方法を見つけます。しかし、私は上で与えたコードでこれを試していませんでした...私はそれを試して、それが動作するかどうかを確認します –

+0

私はまだ列のアプローチに行くチェックボックスのいずれかを有効/無効にするcellformattingイベントを処理する/通常のテキストボックスセルに移動します。 – FloatingKiwi

+0

私はセルが完全に空白である必要があります。標準のテーブルではなく、親の行を分離するために空の行があり、各親の行に複数の子行があり、子の行もあります。ただし、テーブルの複雑な性質を気にすることはありません。私の唯一の問題は、セルのコントロールを別の型に変更すると、値の型は変更されますが、古い値が保持されます。文字列の... .......エラーが全くない、私はちょうど何かを逃したと思う。 –

関連する問題