在VB.net中查找并突出显示多列中的最大值

问题描述 投票:1回答:1

嗨,我需要任何人帮助我,

我需要突出显示表中多列的最高值

对于Ex: -

enter image description here

我试过一些编码..

受保护的子Page_Load(ByVal sender As Object,ByVal e As System.EventArgs)处理Me.Load

    UIUtility = New UIUtility()

    Dim dtStartProcessTime As DateTime
    Dim dtEndProcessTime As DateTime
    Dim dtStartQueryTime As DateTime
    Dim dtEndQueryTime As DateTime
    Dim tsQueryTime As TimeSpan
    Dim tsProcessTime As TimeSpan

    Dim strCassList As String = ""
    Dim dtDefectInfo As New DataTable
    Dim dtDefectList As New DataTable
    Dim dtResult As New DataTable
    Dim dtSelectDefectInfo As New DataTable
    Dim strCass_id As String = ""

    Dim dtDisplay As New DataTable


    Try

        dtStartProcessTime = Now

        Me.Title = "Shipping Cassettes List"


        Dim sEvent_date As String = Request.QueryString("Event_date").Trim()
        Dim sRecipe As String = Request.QueryString("recipe").Trim()
        Dim sOperation As String = Request.QueryString("operation").Trim()
        Dim sEquipment As String = Request.QueryString("equipment").Trim()

        lblStatus.Text = "Event_date:" + sEvent_date + _
                   "<br>Recipe:" + sRecipe + _
                   "<br>Operation:" + sOperation + _
                   "<br>Equipment:" + sEquipment + _
                   "<br><br>"


        Dim dtCass As DataTable


        Dim drNew As DataRow
        Dim SelectDefectInfo As DataRow()

        dtStartQueryTime = Now
        dtCass = UIUtility.RetrieveShipCassette(sEvent_date, sRecipe, sOperation, sEquipment)

        If dtCass.Rows.Count > 0 Then

            strCassList = UIUtility.ReturnStringFromdt(dtCass, "shipping_cass_id")
            dtDefectInfo = UIUtility.RetrieveDefectInfo(strCassList)
            dtDefectList = UIUtility.dtView(dtDefectInfo, "defect")

            dtResult.Columns.Add("cass_id", Type.GetType("System.String"))

            For i = 0 To dtDefectList.Rows.Count - 1

                If Not (dtDefectList.Rows(i).Item("defect").ToString().Equals("NON")) Then

                    dtResult.Columns.Add(dtDefectList.Rows(i).Item("defect"), Type.GetType("System.Int32")).DefaultValue = 0




                End If


            Next

            For i = 0 To dtCass.Rows.Count - 1

                drNew = dtResult.NewRow

                strCass_id = dtCass.Rows(i).Item("shipping_cass_id")

                drNew("cass_id") = dtCass.Rows(i).Item("cass_id")





                    SelectDefectInfo = dtDefectInfo.Select("dest_cass_id = '" + strCass_id + "'")

                    dtSelectDefectInfo = New DataTable

                    If SelectDefectInfo.Count > 0 Then


                        dtSelectDefectInfo = SelectDefectInfo.CopyToDataTable


                        For j = 0 To dtSelectDefectInfo.Rows.Count - 1


                            If Not (dtSelectDefectInfo.Rows(j).Item("defect").ToString().Trim().Equals("NON")) Then


                                drNew(dtSelectDefectInfo.Rows(j).Item("defect").ToString()) = dtSelectDefectInfo.Rows(j).Item("defect_count").ToString()

                            End If

                        Next


                    End If

                    dtResult.Rows.Add(drNew)

            Next



        End If

        dtEndQueryTime = Now
        tsQueryTime = dtEndQueryTime.Subtract(dtStartQueryTime)

        'For i As Integer = 0 To dtCass.Rows.Count - 1
        '    drDisplay = dtDisplay.NewRow
        '    drDisplay("cass_id") = dtCass.Rows(i)("cass_id").ToString()
        '    dtDisplay.Rows.Add(drDisplay)
        '    'dtCass.Rows(i).Item(
        'Next


        'e.Row.BorderWidth = 2



        dgSummary.DataSource = Nothing
        dgSummary.DataSource = dtResult
        dgSummary.DataBind()

        lblStatus.Text += "Total " + dtResult.Rows.Count.ToString + " rows of data found."

        dtEndProcessTime = Now
        tsProcessTime = dtEndProcessTime.Subtract(dtStartProcessTime)

        lblProcessingTime.Text = "Processing Time: " + tsProcessTime.TotalSeconds.ToString + " Secs (Query Time: " + tsQueryTime.TotalSeconds.ToString + " Secs)"



         For Each r As GridViewRow In dtResult.Rows()
            Dim max As Integer = Integer.MinValue
            For i = 1 To r.Cells.Count - 1
                Dim n As Integer
                If Integer.TryParse(CType(r.Cells(i).Text, String), n) Then max = Math.Max(n, max)

            Next
            For i = 1 To r.Cells.Count - 1
                If r.Cells(i).Text = max Then
                    r.Cells(i).BackColor = Drawing.Color.Orange
                    Exit For
                End If
            Next
        Next
    Catch ex As Exception

        lblMessage.Text = "An error occured:" + ex.Message + " Please contact your administrator."
        MyLog.WriteToLog(Me.GetType().Name(), System.Reflection.MethodInfo.GetCurrentMethod().Name, "Exception occured." & vbCrLf & "Error Message:" & ex.Message & vbCrLf & " StackTrace:" & ex.StackTrace)

    End Try

End Sub

Protected Sub dgSummary_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles dgSummary.RowDataBound

    Dim cass_id As String = ""
    'Dim dtResult As New DataTable
    'Dim DataGridView1 As New DataTable
    Dim dtCass As New DataTable

    If e.Row.RowType = DataControlRowType.DataRow Then



        cass_id = e.Row.Cells(0).Text.Trim


        If Not e.Row.Cells(0).Text.Trim.Equals("") Then
            e.Row.Cells(0).Attributes.Add("Title", "Click and view the cassette details")
            e.Row.Cells(0).Attributes("onmouseover") = "this.style.color='DodgerBlue';this.style.cursor='hand';"
            e.Row.Cells(0).Attributes("onmouseout") = "this.style.color='Black';"
            e.Row.Cells(0).Attributes("onClick") = _
            String.Format("window.open('{0}','_blank','scrollbars=yes,status=yes,location=yes,toolbar=yes,menubar=yes,resizable=Yes')", _
            ResolveUrl(System.Configuration.ConfigurationManager.AppSettings("SFEHReportLink_SSL") + cass_id))

            e.Row.Cells(0).Style("cursor") = "pointer"

        End If

End Sub

也许有任何编码比这更容易,因为我有17个项目非常感谢你们帮助你们。

添加新代码后,我收到此错误,

new error

vb.net if-statement datarow
1个回答
1
投票

也许这个例子可以帮助你

Private Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.Click
    For Each r As DataGridViewRow In DataGridView1.Rows
        Dim max As Integer = Integer.MinValue
        For i = 1 To r.Cells.Count - 1
            Dim n As Integer
            If Integer.TryParse(CType(r.Cells(i).Value, String), n) Then max = Math.Max(n, max)
        Next
        For i = 1 To r.Cells.Count - 1
            If r.Cells(i).Value = max Then
                r.Cells(i).Style.BackColor = Color.Orange
                Exit For
            End If
        Next
    Next
End Sub
© www.soinside.com 2019 - 2024. All rights reserved.