2016-08-09 135 views
0

Ich arbeite mit DataGridView und es gibt ein Szenario, das ich zentriert ausrichten Text in ausgewählten Spalten anzeigen muss, habe ich gesetzt, Header Center Align Text aber mit Zeilenzelle und Bedingungen, Ich kann nicht herausfinden, wie?Center Align Zelle Text in Vb.Net DataGridView

Angenommen, ich habe 4 Reihen mit 3 Spalten, ID ,Name,Type, auf der Basis der Type Spalte Ich möchte, dass meine Daten zeigen, wie unten Bild gegeben,

In CellFormattingEvent ich es geschafft haben, anderes Farbschema einzustellen.

Private Sub grdDetailsNew_CellFormatting(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) Handles grdFruitDetailsNew.CellFormatting 
    Try 
     If e.RowIndex > -1 Then 
      If grdDetailsNew.Rows.Count > 0 Then 
       If grdDetailsNew.Rows(e.RowIndex).Cells("Type").Value = 1 Then 
        e.CellStyle.BackColor = Color.FromArgb(253, 192, 97) 
        e.CellStyle.Font = New Font(e.CellStyle.Font.FontFamily, 17, FontStyle.Regular) 
       ElseIf grdDetailsNew.Rows(e.RowIndex).Cells("Type").Value = 2 Then 
        e.CellStyle.BackColor = Color.FromArgb(255, 249, 237) 
        e.CellStyle.Font = New Font(e.CellStyle.Font.FontFamily, 16, FontStyle.Regular) 
       Else 
        e.CellStyle.BackColor = Color.FromArgb(255, 255, 255) 
        e.CellStyle.Font = New Font(e.CellStyle.Font.FontFamily, 15, FontStyle.Regular) 
       End If 
      End If 
     End If 

    Catch ex As Exception 
     WriteToLog(ex) 
    End Try 
End Sub 
Private Sub grdDetailsNew_CellPainting(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellPaintingEventArgs) Handles grdFruitDetailsNew.CellPainting 
    Try 

     If e.RowIndex > -1 AndAlso e.ColumnIndex > -1 Then 
      If e.ColumnIndex = 2 AndAlso grdDetailsNew.Rows(e.RowIndex).Cells("Type").Value = 1 Then 
       e.CellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter 
      End If 
     End If 

    Catch ex As Exception 

    End Try 
End Sub 

Antwort

1

Fügen Sie einfach e.CellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter in das Zellformatierungsereignis ein. Und entfernen Sie es aus dem Paint-Ereignis.

zB:

Private Sub DataGridView1_CellFormatting(sender As Object, e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) Handles DataGridView1.CellFormatting 
    Dim type = CInt(CType(sender, DataGridView).Rows(e.RowIndex).Cells("type").Value) 
    If type = 1 andalso e.ColumnIndex = 1 Then e.CellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter 
End Sub 
+0

Nein, nicht die volle Reihe, sondern eine bestimmte Spalte auf bestimmte Bedingung – DareDevil

+0

ich ein Beispiel hinzugefügt haben, die für den Reihen-Feld aussieht und formatiert die erste Spalte, wenn beide = 1 – FloatingKiwi

+1

es eigentlich scheint, dass Sie den richtigen Code in Ihrem Paint-Ereignis haben. Versuchen Sie stattdessen, es in den Zellformatierungshandler zu verschieben. – FloatingKiwi