0

我尽力将程序缩小为以下代码。在此示例中,我将英国和美国作为有效国家/地区。如果有人住在这些国家/地区之外,我想显示一条错误消息并在网格视图上突出显示它们。例如,John 和 Chris 来自中国,因此他们应该在 gridview 上突出显示。有可能这样做吗?请看示例图片。可以仅突出显示名称或整行。

非常感谢。

    Dim dt As New DataTable
    dt.Columns.Add("ID")
    dt.Columns.Add("Name")
    dt.Columns.Add("Country")

    dt.Rows.Add("1", "John", "China")
    dt.Rows.Add("2", "Harry", "USA")
    dt.Rows.Add("3", "Joe", "UK")
    dt.Rows.Add("4", "Emma", "UK")
    dt.Rows.Add("5", "Chris", "China")
    dt.Rows.Add("6", "Jenny", "UK")


    Dim isValid As Boolean = True
    Dim keywords() As String = {"UK", "USA"}
    Dim str As String = ""

    For Each x As DataRow In dt.Rows
        If Not keywords.Contains(x("Country").ToString()) = True Then
            isValid = False
        End If
    Next

    If isValid = False Then
        lblmessage.Text = "Some people don't live in valid countries"
    End If

    GridView1.DataSource = dt
    GridView1.DataBind()

在此处输入图像描述

4

2 回答 2

1

有可能这样做吗?

是的,一种方法是使用 GridView 的RowDataBound事件。假设您有一个有效国家/地区的列表:

Private validCountries() As String = {"UK", "USA"}

Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs)
    Select Case e.Row.RowType
        Case DataControlRowType.DataRow
            Dim row = DirectCast(e.Row.DataItem, DataRowView).Row
            Dim country = row.Field(Of String)("Country")
            ' assuming you're using TemplateFields with LblName for the Name of the user '
            Dim LblName = DirectCast(e.Row.FindControl("LblName"), Label)
            If Not validCountries.Contains(country.ToUpper) Then
                LblName.CssClass = "InvalidCountry"
            End If
    End Select
End Sub

如果您改用 BoundFields,则需要在表格单元格上应用 CSS

e.Row.Cells(1).CssClass = "InvalidCountry"
于 2012-05-11T10:18:56.263 回答
0

我会保留蒂姆的答案作为正确答案。我非常感谢他的帮助。如果有人像我一样尝试做同样的事情,这是我们可以做的另一种选择。希望它对那里的人有所帮助。

    Imports System.Data

    Partial Class _Default
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load

    Dim dt As New DataTable
    dt.Columns.Add("ID")
    dt.Columns.Add("NAME")

    dt.Rows.Add("1", "John")
    dt.Rows.Add("2", "Chris")
    dt.Rows.Add("3", "")

    Dim str As New StringBuilder

    If checkName(dt) = False Then
        str.Append("Empty Name <br />")
    End If

    Literal1.Text = str.ToString

    GridView1.DataSource = dt
    GridView1.DataBind()

    For Each gvrow In GridView1.Rows
        For iCol = 0 To gvrow.Cells.Count - 1
            If InStr(gvrow.Cells(iCol).Text, "***") > 0 Then
                gvrow.Cells(iCol).Text = Replace(gvrow.Cells(iCol).Text, "***", "")
                gvrow.Cells(iCol).ForeColor = Drawing.Color.Red
                gvrow.Cells(iCol).BackColor = Drawing.Color.LightCyan
            End If

        Next
    Next

    End Sub

    Private Function checkName(dt As DataTable) As Boolean

    For Each x In dt.Rows
        If x("Name") = "" Then
            x("Name") = "***"
            Return False
        End If
    Next

    Return True
    End Function

    End Class
于 2012-05-15T09:17:17.410 回答