Gridview将当前行与上一行进行比较

时间:2012-03-09 14:18:05

标签: asp.net .net vb.net gridview

我想基于比较当前行值(第2列)和前一行值来格式化gridview。因此,如果它们是相同的,背景颜色将是相同的,例如绿色。如果它们不相同,则背景颜色为红色。例如:

Gridview values
Car 1 (bg color green)
Car 1 (bg color green)
Car 2 (bg color red)
Car 3 (bg color green)
Car 3 (bg color green)
Car 3 (bg color green)

我无法让它发挥作用。这是我提出的代码。

Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowCreated

    If e.Row.RowType = DataControlRowType.DataRow Then

        If Not e.Row.DataItem Is Nothing Then

            'switch for first row 
            If e.Row.RowIndex = 1 Then
                Dim Gprev As GridViewRow = GridView1.Rows(e.Row.RowIndex - 1)
                If Gprev.Cells(1).Text = e.Row.Cells(1).Text Then
                    'e.Row.Cells(1).Text = ""
                    e.Row.BackColor = Drawing.Color.Red
                End If
            End If

            'now continue with the rest of the rows
            If e.Row.RowIndex > 1 Then

                'set reference to the row index and the current value
                Dim intC As Integer = e.Row.RowIndex
                Dim lookfor As String = e.Row.Cells(1).Text

                'now loop back through checking previous entries for matches 
                Do
                    Dim Gprev As GridViewRow = GridView1.Rows(intC - 1)

                    If Gprev.Cells(1).Text = e.Row.Cells(1).Text Then
                        'e.Row.Cells(1).Text = ""
                        e.Row.BackColor = Drawing.Color.Red
                    End If

                    intC = intC - 1
                Loop While intC > 0

            End If

        End If

    End If

End Sub

3 个答案:

答案 0 :(得分:8)

c#中的代码,但希望能够轻松翻译......

在RowDataBound中......

if (e.RowType != DataControlRowType.DataRow) return;  
if (e.Row.DataItemIndex ==0)  
{  
  e.Row.Cells[1].BackColor = Color.Green;  
  return;  
}  
var thisRow = e.Row;   
var prevRow = GridView.Rows[e.Row.DataItemIndex-1];  
e.Row.Cells[1].BackColor = (thisRow.Cells[1].Text == prevRow.Cells[1].Text) ? Color.Green : Color.Red;  
}

另请注意绿色&红色通常不是相互对比的好选择(色盲)

答案 1 :(得分:2)

尚未经过测试,但这应该有用,或至少给你一个提示:

Dim lastRowValue As String = ""

Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowCreated
    If e.Row.RowType = DataControlRowType.DataRow Then
        e.Row.BackColor = If(e.Row.Cells(1).Text = lastRowValue AndAlso
                             e.Row.RowIndex <> 0,
                             Drawing.Color.Red,
                             Drawing.Color.Green)
        lastRowValue = e.Row.Cells(1).Text
    End If
End Sub

请注意,您已使用GridView1_RowDataBound,但在样本中处理了GridView1.RowCreated

答案 2 :(得分:0)

                    If e.Row.DataItemIndex = 0 Then
                e.Row.BackColor = Drawing.Color.Blue
            End If

            Dim thisRow As GridViewRow = e.Row

            If e.Row.RowIndex <> 0 Then
                Dim prevRow As GridViewRow = GridView1.Rows(e.Row.DataItemIndex - 1)

                If thisRow.Cells(1).Text = prevRow.Cells(1).Text Then
                    e.Row.BackColor = Drawing.Color.Blue
                    prevRow.BackColor = Drawing.Color.Blue
                Else
                    e.Row.BackColor = Drawing.Color.DarkCyan
                End If

            End If