0

プログラムを次のコードに縮小するために最善を尽くしました。この例では、有効な国として UK と USA を使用しています。誰かがそれらの国以外に住んでいる場合は、エラー メッセージを表示してグリッドビューで強調表示したいと思います。たとえば、John と Chris は中国出身なので、グリッドビューで強調表示する必要があります。それは可能ですか?例の写真をご覧ください。名前だけ、または行全体を強調表示できます。

どうもありがとう。

    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

それは可能ですか?

はい、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 に答える