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

时间:2019-03-11 07:15:06

标签: vb.net if-statement datarow

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

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

例如:-

enter image description here

我已经尝试了一些编码。

受保护的子Page_Load(ByVal发送者作为对象,ByVal e作为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

1 个答案:

答案 0 :(得分: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