|
ความหมายของการจัดอันดับที่มีค่าคะแนนเท่ากัน ก็จะคล้ายๆกับการเล่นกอล์ฟนั่นแหละครับ เช่นตามภาพ อันดับที่ 9 มีคะแนนเท่ากัน 3 คน ดังนั้นอันดับที่ 10 และ 11 ก็เลยไม่มี พอนับคนถัดไปก็จะไล่เรียงไปในลำดับที่ 12 ...
มาดูโค้ดกันเถอะ ... - ' / ----------------------------------------------------------------
- ' / Developer : Mr.Surapon Yodsanga (Thongkorn Tubtimkrob)
- ' / eMail : thongkorn@hotmail.com
- ' / URL: http://www.g2gnet.com (Khon Kaen - Thailand)
- ' / Facebook: https://www.facebook.com/g2gnet (For Thailand)
- ' / Facebook: https://www.facebook.com/commonindy (Worldwide)
- ' / More info: http://www.g2gnet.com/webboard
- ' /
- ' / Purpose: How to sort duplicate ranking in DataGridView without DataBase.
- ' / Microsoft Visual Basic .NET (2010)
- ' /
- ' / This is open source code under @CopyLeft by Thongkorn Tubtimkrob.
- ' / You can modify and/or distribute without to inform the developer.
- ' / ----------------------------------------------------------------
- Public Class frmRankingDuplicate
- Dim dt As DataTable
- Dim MaxRow As Integer = 15
- ' / ----------------------------------------------------------------
- '// Initialize DataGridView @Run Time
- Private Sub InitGrid()
- With dgvData
- .RowHeadersVisible = False
- .AllowUserToAddRows = False
- .AllowUserToDeleteRows = False
- .AllowUserToResizeRows = False
- .MultiSelect = True
- .SelectionMode = DataGridViewSelectionMode.FullRowSelect
- .ReadOnly = True
- .Font = New Font("Tahoma", 9)
- ' Autosize Column
- .AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill
- .AutoResizeColumns()
- '// Even-Odd Color
- .AlternatingRowsDefaultCellStyle.BackColor = Color.AliceBlue
- ' Adjust Header Styles
- With .ColumnHeadersDefaultCellStyle
- .BackColor = Color.Navy
- .ForeColor = Color.Black ' Color.White
- .Font = New Font("Tahoma", 9, FontStyle.Bold)
- End With
- End With
- End Sub
- Private Sub frmRankingDuplicate_FormClosed(sender As Object, e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
- Me.Dispose()
- Application.Exit()
- End Sub
- ' / ----------------------------------------------------------------
- Private Sub frmRankingDuplicate_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
- Call InitGrid()
- Call Ranking()
- End Sub
- ' / ----------------------------------------------------------------
- Private Sub Ranking()
- Dim ds As New DataSet()
- dt = New DataTable
- dt.Columns.Add("Student", GetType(String))
- dt.Columns.Add("Subject A", GetType(Integer))
- dt.Columns.Add("Subject B", GetType(Integer))
- dt.Columns.Add("Subject C", GetType(Integer))
- dt.Columns.Add("Average", GetType(Double))
- dgvData.DataSource = dt
- '//
- Randomize()
- Dim RandomClass As New Random()
- For i As Integer = 0 To MaxRow - 1
- Dim dr As DataRow = dt.NewRow()
- '// RandomClass
- dr(0) = "Student " & i + 1
- dr(1) = RandomClass.Next(0, 100)
- dr(2) = RandomClass.Next(0, 100)
- dr(3) = RandomClass.Next(0, 100)
- Dim SumCol As Double = 0
- For iCol As Byte = 1 To 3 'MaxCol
- SumCol = SumCol + dr(iCol)
- Next
- dr(4) = Format(SumCol / 3, "0.00")
- '//
- dt.Rows.Add(dr)
- Next
- '// Calcualte ranking
- dgvData.DataSource = RankingDuplicate(dt, "Average")
- End Sub
- ' / ----------------------------------------------------------------
- Public Function RankingDuplicate(dt As DataTable, fld As String) As DataTable
- '// Descending (Z --> A)
- Dim rankingDt = (From row In dt.AsEnumerable() Order By row.Field(Of Double)(fld) Descending.CopyToDataTable())
- rankingDt.Columns.Add("Ranking")
- Dim rank As Integer = 1
- Dim count As Integer = 1
- For i As Integer = 0 To rankingDt.Rows.Count - 2
- rankingDt.Rows(i)("Ranking") = rank
- '// If not duplicate value then increment +1.
- If rankingDt.Rows(i)(fld).ToString() <> rankingDt.Rows(i + 1)(fld).ToString() Then
- rank += 1
- rank = count + 1
- End If
- count += 1
- Next
- rankingDt.Rows(rankingDt.Rows.Count - 1)("Ranking") = rank
- Return rankingDt
- End Function
- Private Sub btnExit_Click(sender As System.Object, e As System.EventArgs) Handles btnExit.Click
- Me.Close()
- End Sub
- Private Sub btnProcess_Click(sender As System.Object, e As System.EventArgs) Handles btnProcess.Click
- Call Ranking()
- End Sub
- End Class
คัดลอกไปที่คลิปบอร์ด
ดาวน์โหลดโค้ดต้นฉบับ VB.NET (2010) ได้ที่นี่ ...
|
ขออภัย! โพสต์นี้มีไฟล์แนบหรือรูปภาพที่ไม่ได้รับอนุญาตให้คุณเข้าถึง
คุณจำเป็นต้อง ลงชื่อเข้าใช้ เพื่อดาวน์โหลดหรือดูไฟล์แนบนี้ คุณยังไม่มีบัญชีใช่ไหม? ลงทะเบียน
x
|