2016-02-19 55 views
0

我有几个datagridview的,从mysql数据库列出不同的位和bobs。格式化datagridview中的行

其中之一有一个名为'结果'的专栏。

这可以是'是','待定'或'否'。

我需要根据该值格式化此列表。

我使用的那一刻以下...

Private Sub nb_myleads_dgv_CellFormattin(ByVal sender As Object, ByVal e As DataGridViewCellFormattingEventArgs) Handles nb_myleads_dgv.CellFormatting 
    If e.ColumnIndex = nb_myleads_dgv.Columns("outcome").Index Then 
     If e.Value.ToString = "Yes" Then 
      nb_myleads_dgv.Rows(e.RowIndex).DefaultCellStyle.BackColor = Color.DarkGreen 
     ElseIf e.Value.ToString = "Pending" Then 
      nb_myleads_dgv.Rows(e.RowIndex).DefaultCellStyle.BackColor = Color.DarkOrange 
     ElseIf e.Value.ToString = "No" Then 
      nb_myleads_dgv.Rows(e.RowIndex).DefaultCellStyle.BackColor = Color.DarkRed 
     End If 
End sub 


    End If 

这似乎是我必须有我的专栏“结果”在DGV可见这个工作。 我已经通过将此列宽设置为3个像素来解决这个问题,但这看起来有点肮脏。基于隐藏列的值,不可能在datagridview中格式化单元格吗?

在此先感谢

+0

问题后,做到这一点:你即使声明闯过如果列?隐藏是否为e.RowIndex获得适当的值? – Claudius

+0

'CellFormattin [g]'是一个昂贵的地方,因为它经常被调用。尝试'RowsAdded'事件 – Plutonix

回答

0

我相信你的问题是,小区必须是可见的,否则它永远不会通过if语句。

的CellFormatting事件发生于每细胞涂时间,所以 处理该事件时,你应该避免冗长的处理。当检索单元格FormattedValue或调用其GetFormattedValue方法时,也会发生此事件。 事件也会发生。

Link

我会得到if语句摆脱掉这一点,做这样的事情:

 Dim str as string = dataGridView1.Rows[e.RowIndex].Cells["outcome"].Value.ToString 
     If str = "Yes" Then 
      nb_myleads_dgv.Rows(e.RowIndex).DefaultCellStyle.BackColor = Color.DarkGreen 
     ElseIf str = "Pending" Then 
      nb_myleads_dgv.Rows(e.RowIndex).DefaultCellStyle.BackColor = Color.DarkOrange 
     ElseIf str = "No" Then 
      nb_myleads_dgv.Rows(e.RowIndex).DefaultCellStyle.BackColor = Color.DarkRed 
     End If 
0

为什么不通过行循环使用为每着色基于单元格的值。如果可见或不可见,则无关紧要。

For Each row As DataGridViewRow In DataGridView1.Rows 
     If Not row.IsNewRow Then 
      Select Case row.Cells(2).Value.ToString 
       Case "Yes" 
        row.DefaultCellStyle.BackColor = Color.DarkGreen 
       Case "Pending" 
        row.DefaultCellStyle.BackColor = Color.DarkOrange 
       Case "No" 
        row.DefaultCellStyle.BackColor = Color.DarkRed 

      End Select 
     End If 
    Next 

凡在此情况下,第3列(单元(2)是隐藏的,您将在cellformatting填充网格,而不是

+0

同上 - 除非有成千上万行刷新背景你自己可能是要走的路。 – rheitzman