Penjawab teratas
[TANYA] Cara Memilih Random Row Pada DatagridView

Pertanyaan
-
saya jelasi dulu kasus nya..
sebelumnya saya coba buat program dan Saya menggunakan Komponen Toolbox dari DevExpress, berupa GridControl, komponen tersebut = DatagridView. (Berikut Screenshot nya).
Nah, Dari Form itu, saya ingin membuat bagaimana supaya program dapat Memilih Data secara Acak dari GridControl. ( Select Random Row ).
untuk Kode nya, saya menggunakan code berikut :Dim Detik As Integer Dim NoSpin As Integer Dim RandNo As Random '----Menampilkan Data Dari Database ke GridControl. Private Sub IsiGridData() Using Konek As New Koneksi.Koneksi If Konek.OpenFromFile(General.Constant.ConfigPath) Then Using da As New MySql.Data.MySqlClient.MySqlDataAdapter("Select no as 'SPIN_NO', id as 'ID_SPIN'FROM SPIN ORDER BY NO ASC", Konek.OKoneksi) Dim DT As New DataTable da.Fill(DT) GridControl1.DataSource = DT 'GridControl1.Refresh() End Using End If End Using End Sub
'----Code Pada Button GET RANDOM untuk mengaktifkan Timer1 dan timer2 Private Sub SimpleButton2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SimpleButton2.Click IsiGridData() TextEdit2.Text = 5 'Lama Waktu Yang Diberikan untuk memlih 1 row. Detik = CInt(TextEdit2.Text) Timer1.Start() Timer2.Start() End Sub
'----Code Pada Timer1 --- Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick If TextEdit2.Text > CInt(0) Then TextEdit2.Text = Detik For i As Integer = 0 To GridView1.RowCount - 1 RandNo = New Random NoSpin = RandNo.Next(CInt(GridView1.GetDataRow(i)(0))) Next TextEdit1.Text = NoSpin End If If TextEdit2.Text = CInt(0) Then Timer1.Stop() Timer2.Stop() End If End Sub '----Code Pada Timer2 ---- Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick Detik -= 1 TextEdit2.Text = Detik If Detik = 0 Then Timer2.Stop() End If End Sub '----End Code ----
Code Diatas Sudah Berhasil Untuk Memilih Data secara Acak (Selected Random Row ) dari GridControl. Akan Tetapi, Suatu Saat Akan Terjadi Dimana row Yang Sudah Terpilih, Nantinya Jika Di Klik Button "GET RANDOM", Akan Terpilih Kembali.
yang ingin saya tanyakan, Bagaimana Cara/Code untuk membuat program supaya saat dilakukan proses GET Random, Maka Akan Dipilih Satu data (Selected Random Row ), Dan jika Di tekan button "GET RANDOM" kembali akan melakukan proses Get Random, Namun, Row Yang Sudah Terpilih Sebelumnya Tidak Akan terpilih Kembali Pada Proses Get Random Selanjutnya.?
Thank's...Kamis, 12 Desember 2013 07.55
Jawaban
-
Hi Ari
Mohon maaf atas keterlambatan membalas forum ini
Karena kamu menggunakan software DevExpress, saya jadi tidak bisa test untuk keseluruhan kodenya
Saya hanya dapat menggunakan DataGridView control untuk testing. Dan database nya saya menggunakan Ms SQL
Kita bisa menggunakan sebuah ArrayList untuk store index yang sudah tampil sebelumnya, kemudian buat sebuah fungsi untuk cek jika baris tersebut sudah dipilih sebeleumnyaImports System.Data.SqlClient Public Class Form1 Dim Detik As Integer Dim NoSpin As Integer Dim RandNo As Random '----Menampilkan Data Dari Database ke GridControl. Private Sub IsiGridData() Dim connectionString As String = "Data Source=127.0.0.1;Initial Catalog=dbtest;MultipleActiveResultSets=False;User ID=****;Password=****" Dim strSql As String = "Select no as 'SPIN_NO', id as 'ID_SPIN' FROM SPIN ORDER BY NO ASC" Dim dtb As New DataTable Using cnn As New SqlConnection(connectionString) cnn.Open() Using dad As New SqlDataAdapter(strSql, cnn) dad.Fill(dtb) DataGridView1.DataSource = dtb DataGridView1.Refresh() End Using cnn.Close() End Using End Sub Private Sub SimpleButton2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SimpleButton2.Click IsiGridData() TextEdit1.Text = 5 Detik = CInt(TextEdit1.Text) Timer1.Start() Timer2.Start() End Sub Dim record As New ArrayList Private Function IsSelectedRow(ByVal value As Integer) As Boolean If record.Count > 0 Then For Each i As Integer In record If i = value Then Return True End If Next End If Return False End Function '----Code Pada Timer1 --- Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick If Detik <> 0 Then Timer1.Interval = Detik * 1000 End If If TextEdit1.Text > CInt(0) Then TextEdit1.Text = Detik RandNo = New Random While 1 <> 0 NoSpin = RandNo.Next(DataGridView1.RowCount - 1) If IsSelectedRow(NoSpin) = False Then record.Add(NoSpin) DataGridView1.Rows(NoSpin).Selected = True 'MessageBox.Show(NoSpin.ToString()) TextEdit2.Text = DataGridView1.Rows(NoSpin).Cells(0).Value Exit While End If End While End If If TextEdit1.Text = CInt(0) Or record.Count = DataGridView1.RowCount - 1 Then Timer1.Stop() Timer2.Stop() End If End Sub '----Code Pada Timer2 ---- Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick If Detik <> 0 Then Timer2.Interval = Detik * 1000 End If Detik -= 1 TextEdit1.Text = Detik If Detik = 0 Then Timer2.Stop() End If End Sub End Class
Terima kasih
Andy Nugraha
TechNet Community Support
- Disarankan sebagai Jawaban oleh Andy NugrahaModerator Rabu, 18 Desember 2013 06.08
- Ditandai sebagai Jawaban oleh Andy NugrahaModerator Jumat, 20 Desember 2013 01.10
Rabu, 18 Desember 2013 06.07Moderator
Semua Balasan
-
need solution nya.... :-DJumat, 13 Desember 2013 07.34
-
Mungkin bisa dilakukan pencatatan mas, pada data yang sudah pernah di random. Kira-kira itu solusinya
Salam
Xan To
Selasa, 17 Desember 2013 12.25 -
Hi Ari
Mohon maaf atas keterlambatan membalas forum ini
Karena kamu menggunakan software DevExpress, saya jadi tidak bisa test untuk keseluruhan kodenya
Saya hanya dapat menggunakan DataGridView control untuk testing. Dan database nya saya menggunakan Ms SQL
Kita bisa menggunakan sebuah ArrayList untuk store index yang sudah tampil sebelumnya, kemudian buat sebuah fungsi untuk cek jika baris tersebut sudah dipilih sebeleumnyaImports System.Data.SqlClient Public Class Form1 Dim Detik As Integer Dim NoSpin As Integer Dim RandNo As Random '----Menampilkan Data Dari Database ke GridControl. Private Sub IsiGridData() Dim connectionString As String = "Data Source=127.0.0.1;Initial Catalog=dbtest;MultipleActiveResultSets=False;User ID=****;Password=****" Dim strSql As String = "Select no as 'SPIN_NO', id as 'ID_SPIN' FROM SPIN ORDER BY NO ASC" Dim dtb As New DataTable Using cnn As New SqlConnection(connectionString) cnn.Open() Using dad As New SqlDataAdapter(strSql, cnn) dad.Fill(dtb) DataGridView1.DataSource = dtb DataGridView1.Refresh() End Using cnn.Close() End Using End Sub Private Sub SimpleButton2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SimpleButton2.Click IsiGridData() TextEdit1.Text = 5 Detik = CInt(TextEdit1.Text) Timer1.Start() Timer2.Start() End Sub Dim record As New ArrayList Private Function IsSelectedRow(ByVal value As Integer) As Boolean If record.Count > 0 Then For Each i As Integer In record If i = value Then Return True End If Next End If Return False End Function '----Code Pada Timer1 --- Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick If Detik <> 0 Then Timer1.Interval = Detik * 1000 End If If TextEdit1.Text > CInt(0) Then TextEdit1.Text = Detik RandNo = New Random While 1 <> 0 NoSpin = RandNo.Next(DataGridView1.RowCount - 1) If IsSelectedRow(NoSpin) = False Then record.Add(NoSpin) DataGridView1.Rows(NoSpin).Selected = True 'MessageBox.Show(NoSpin.ToString()) TextEdit2.Text = DataGridView1.Rows(NoSpin).Cells(0).Value Exit While End If End While End If If TextEdit1.Text = CInt(0) Or record.Count = DataGridView1.RowCount - 1 Then Timer1.Stop() Timer2.Stop() End If End Sub '----Code Pada Timer2 ---- Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick If Detik <> 0 Then Timer2.Interval = Detik * 1000 End If Detik -= 1 TextEdit1.Text = Detik If Detik = 0 Then Timer2.Stop() End If End Sub End Class
Terima kasih
Andy Nugraha
TechNet Community Support
- Disarankan sebagai Jawaban oleh Andy NugrahaModerator Rabu, 18 Desember 2013 06.08
- Ditandai sebagai Jawaban oleh Andy NugrahaModerator Jumat, 20 Desember 2013 01.10
Rabu, 18 Desember 2013 06.07Moderator -
terima kasih,, sudah saya coba solusinya dan berhasil...
Jumat, 20 Desember 2013 07.40