3

私はこのようなデータベースを持っています

テーブル名: ri_closure ここに画像の説明を入力

isとis now を除くMonthすべての列の上の画像に表示されているように、ここにコードがありますTinyInt(1)MonthVarchar

 Dim con1 As MySqlConnection = New MySqlConnection("server=192.168.2.87;userid=root;password=admin1950;database=inventory")
        Dim sql1 As MySqlCommand = New MySqlCommand("Select * from ri_closure", con1)
        Dim ds1 As DataSet = New DataSet
        Dim adapter1 As MySqlDataAdapter = New MySqlDataAdapter
        con1.Open()
        adapter1.SelectCommand = sql1
        adapter1.Fill(ds1, "MyTable")
        DataGridView2.DataSource = ds1.Tables(0)
        con1.Close()
        ds1.Tables(0).Columns(2).DataType = GetType(Boolean)
        Me.DataGridView2.Columns(1).Frozen = True
        Dim i As Integer
        For i = 0 To DataGridView2.Columns.Count - 1
            DataGridView2.Columns.Item(i).SortMode = DataGridViewColumnSortMode.Programmatic
        Next
        DataGridView2.Columns(0).Visible = False
        DataGridView2.Columns(1).DefaultCellStyle.BackColor = Color.LightBlue

今、これはそれがどのように見えるかです

ここに画像の説明を入力

これで出力が表示されますが、赤いものは必要ないと思います。目に刺激があり、これがそのための私のコードです

  For Each rw As DataGridViewRow In DataGridView2.Rows
            For ii As Integer = 2 To rw.Cells.Count - 1
                If rw.Cells(ii).Value = False Then
                    rw.Cells(ii).Style.BackColor = Color.Red
                ElseIf rw.Cells(ii).Value = True Then
                    rw.Cells(ii).Style.BackColor = Color.White
                End If
            Next
        Next

ここに私の質問があります。それが可能であることを願っています。代わりにこのようなことをして、セルを赤に変えたいのですが、どうすればこのように未開封のセルを作ることができますか。

ここに画像の説明を入力

空のチェックボックスの代わりに、上の画像と同じように見えます。

もう1つは、チェックボックスをチェックするコードがあるため、満たされたチェックボックスを生成するチェックボックスがチェックされていない値に置き換わることを願っています。

私はいくつかのコードを試して、これが出力です

ここに画像の説明を入力

今後のヘルプのための TYSM

4

2 に答える 2

1

のイベントをDataGridViewCheckBox処理することで、列の描画をカスタマイズできます。次に、チェックボックスを目的の状態で描画するために使用できます。チェックボックスのチェックされていない状態に対して表示したい状態は次のとおりです。CellPaintingDataGridViewCheckBoxRendererCheckBoxState.MixedNormal

Private Sub CellPainting(ByVal sender As Object, _
    ByVal e As DataGridViewCellPaintingEventArgs) Handles DataGridView1.CellPainting
    If (e.ColumnIndex = 0 AndAlso e.RowIndex >= 0) Then
        Dim value = DirectCast(e.FormattedValue, Nullable(Of Boolean))
        e.Paint(e.CellBounds, DataGridViewPaintParts.All And _
                              Not (DataGridViewPaintParts.ContentForeground))
        Dim state = IIf((value.HasValue And value.Value), _
                        VisualStyles.CheckBoxState.CheckedNormal, _
                        VisualStyles.CheckBoxState.MixedNormal)
        Dim size = RadioButtonRenderer.GetGlyphSize(e.Graphics, state)
        Dim location = New Point((e.CellBounds.Width - size.Width) / 2, _
                                (e.CellBounds.Height - size.Height) / 2)
        location.Offset(e.CellBounds.Location)
        CheckBoxRenderer.DrawCheckBox(e.Graphics, location, state)
        e.Handled = True
    End If
End Sub

ソリューションをテストするには、次の方法で列をグリッドに追加できます。

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _
    Handles MyBase.Load
    Dim C1 = New DataGridViewCheckBoxColumn()
    C1.DataPropertyName = "C1"
    C1.HeaderText = "C1"
    C1.TrueValue = 1
    C1.FalseValue = 0
    Me.DataGridView1.Columns.Add(C1)
    Me.DataGridView1.Rows.Add(DirectCast(1, Object))
    Me.DataGridView1.Rows.Add(DirectCast(0, Object))
    Me.DataGridView1.AllowUserToAddRows = False
End Sub

そして、これは結果になります:

ここに画像の説明を入力

チェックされていない (実際には混合状態) を赤色で描画するには、呼び出し後に次のCheckBoxRenderer.DrawCheckBoxコードを使用します。

If (state = VisualStyles.CheckBoxState.MixedNormal) Then
    Dim rect = New Rectangle(location, size)
    rect.Inflate(-2, -2)
    e.Graphics.FillRectangle(Brushes.Red, rect)
End If

ここに画像の説明を入力

于 2016-09-17T10:55:12.323 に答える
0

を利用してから、イベントを使用して独自DataGridViewのコンテンツを表示できます。VirtualModeCellValueNeeded

これが私があなたがすべきことを提案することです、

  1. チェックボックスの代わりに表示する画像を決定します (例: 緑のチェック)
  2. DataGridViewVirtualModeプロパティをに設定しますtrue
  3. すべての月の列を反復してバインドした後、空の文字列として設定しDataGridViewます(これはイベントをトリガーするために重要です)DataTableDataProperptyName
  4. DataGridViewのイベントのイベント ハンドラを作成しますCellValueNeeded。このイベントでは、イベント パラメータで列インデックスと行インデックスを受け取ります。それを使用して背後にある実際の値を見つけ、値にe.Value応じて緑色の目盛り画像を返す ( を使用) か、空白の画像を返します。
于 2016-09-17T10:45:01.947 に答える