Dim myRatingColumn As New CustomDataGridViewColumn.RatingColumn
With myRatingColumn
.HeaderText = "Rating System"
End With
Me.DataGridView1.Columns.Insert(Me.DataGridView1.ColumnCount, myRatingColumn)
Imports System.Data.SqlClient
Public Class Form1
Const ratingBoundColumn As Byte = 3
Private ratingColumn As Byte
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Application.EnableVisualStyles()
Me.DataGridView1.SuspendLayout()
' Fill the datagridview (example)
Dim myConnectionString As String = _
"Data Source=.\SQLEXPRESS;AttachDbFilename='c:\myDatabase.mdf';" & _
";Integrated Security=True;User Instance=True"
Try
Dim connection As New SqlConnection(myConnectionString)
Dim SQL As String = "SELECT * FROM myTable;"
Dim da As New SqlDataAdapter(SQL, connection)
Dim ds As New DataSet
da.Fill(ds, "myTable")
Me.DataGridView1.DataSource = ds.Tables("myTable").DefaultView
connection.Close()
connection = Nothing
Catch ex As Exception
MessageBox.Show(ex.Message, My.Application.Info.Title, MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
' Adds the new column to the datagridview
Dim myRatingColumn As New CustomDataGridViewColumn.RatingColumn
myRatingColumn.HeaderText = "Rating System"
Me.DataGridView1.Columns.Insert(Me.DataGridView1.ColumnCount, myRatingColumn)
' Checks the number of the Rating Column
ratingColumn = Me.DataGridView1.ColumnCount - 1
' Loop on all rows as sets the value on the stars
For Each row As DataGridViewRow In Me.DataGridView1.Rows
If Not row.IsNewRow Then
Dim rc As DataGridViewImageCell
rc = (CType(Me.DataGridView1(ratingColumn, row.Index), DataGridViewImageCell))
rc.Value = row.Cells(ratingBoundColumn).Value
End If
Next
' You can uncomment the next row after tests
' It's to hide de rating bound column
Me.DataGridView1.Columns(ratingBoundColumn).Visible = False
Me.DataGridView1.ResumeLayout()
End Sub
' Each time you change a star it will write on the bound column
Private Sub DataGridView1_CellContentClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick
If e.ColumnIndex = ratingColumn And e.RowIndex <> -1 Then
Dim rc As DataGridViewImageCell
rc = (CType(Me.DataGridView1(ratingColumn, e.RowIndex), DataGridViewImageCell))
If rc.Value <> Me.DataGridView1(ratingBoundColumn, e.RowIndex).Value Then
Me.DataGridView1(ratingBoundColumn, e.RowIndex).Value = rc.Value
End If
End If
End Sub
End Class
Imports System.Data.SqlClient
Public Class Form1
Const ratingBoundColumn As Byte = 2
Private ratingColumn As Byte
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Application.EnableVisualStyles()
Me.DataGridView1.SuspendLayout()
Dim dt As New DataTable
dt.Columns.Add("ID")
dt.Columns.Add("Description")
dt.Columns.Add("Rank")
Dim dr As DataRow
Dim rnd As New Random
For x As Byte = 0 To 100
dr = dt.NewRow
dr.Item("ID") = x.ToString
dr.Item("Description") = "Item " & x.ToString
dr.Item("Rank") = rnd.Next(1, 5)
dt.Rows.Add(dr)
Next
Me.DataGridView1.DataSource = dt
' Adds the new column to the datagridview
Dim myRatingColumn As New CustomDataGridViewColumn.RatingColumn
myRatingColumn.HeaderText = "Rating System"
Me.DataGridView1.Columns.Insert(Me.DataGridView1.ColumnCount, myRatingColumn)
' Checks the number of the Rating Column
ratingColumn = Me.DataGridView1.ColumnCount - 1
' Loop on all rows as sets the value on the stars
For Each row As DataGridViewRow In Me.DataGridView1.Rows
If Not row.IsNewRow Then
Dim rc As DataGridViewImageCell
rc = (CType(Me.DataGridView1(ratingColumn, row.Index), DataGridViewImageCell))
rc.Value = row.Cells(ratingBoundColumn).Value
End If
Next
' You can uncomment the next row after tests
' It's to hide de rating bound column
Me.DataGridView1.Columns(ratingBoundColumn).Visible = False
Me.DataGridView1.ResumeLayout()
End Sub
' Each time you change a star it will write on the bound column
Private Sub DataGridView1_CellContentClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick
If e.ColumnIndex = ratingColumn And e.RowIndex <> -1 Then
Dim rc As DataGridViewImageCell
rc = (CType(Me.DataGridView1(ratingColumn, e.RowIndex), DataGridViewImageCell))
If rc.Value <> Me.DataGridView1(ratingBoundColumn, e.RowIndex).Value Then
Me.DataGridView1(ratingBoundColumn, e.RowIndex).Value = rc.Value
End If
End If
End Sub
End Class
http://blogs.msdn.com/markrideout/archive/2006/01/18/media-player-like-rating-datagridview-column.aspx