Kalau kita menggunakan DataGrid control yang terdapat di dalam asp.net maka untuk melakukan paging merupakan hal yang mudah. Tetapi bagaimana caranya hal tersebut dapat kita lakukan pada DataGrid Winforms control? Sebenarnya mudah juga sih Contoh paging ini menggunakan SqlDataAdapter dengan memanfaatkan Overload method yang dimiliki oleh SqlDataAdapter yaitu Fill method. Pada overload method Fill terdapat pilihan untuk passing parameter berupa start record index yang digunakan untuk menentukan pada record ke berapa kita akan ambil datanya dan paramater max record untuk membatasi jumlah record yang akan ditampilkan dari start record indexnya.
Code dibawah ini dapat digunakan untuk VB.Net versi 2001 s/d 2005, tetapi untuk contohnya saya gunakan versi 2005...Nah kalau anda menggunakan VS versi 2005 maka secara default SQLDataAdapter tidak nampak di Toolboxnya...Anda harus menambahkannya secara manual, yaitu : Klik kanan toolboxnya kemudian pilih Choose Items...Nah di tab .net fx component anda cari SQLDataAdapter...
1: Imports System.Data.SqlClient
2:
3: Public Class Form1
4:
5: '//deklarasi variables:
6: Private intStartRec, intRecPerPage, intTotalRec As Integer
7:
8: '//fungsi untuk menghitung jumlah record
9: '//yg ada di tabel customers (Northwind)
10: Private Function GetTotalRecord() As Integer
11: Using sqlCmd As New SqlCommand
12: Using sqlConn As New SqlConnection _
13: ("Database=Northwind;Server=localhost;" & _
14: "Integrated Security=SSPI")
15:
16: sqlCmd.CommandType = CommandType.Text
17: sqlCmd.Connection = sqlConn
18: sqlCmd.CommandText = _
19: "Select Count(*) From Customers"
20:
21: If sqlConn.State <> ConnectionState.Open _
22: Then sqlConn.Open()
23:
24: intTotalRec = Convert.ToInt32( _
25: sqlCmd.ExecuteScalar)
26:
27: Return intTotalRec
28: End Using
29: End Using
30: End Function
31:
32: '//prosedur untuk mengambil data dari tabel (Customers)
33: '//yang ada di database Northwind.
34: '//Di prosedur inilah paging record dilakukan
35: '//dengan memanfaatkan overload method Fill
36: '//yang dimiliki oleh SqlDataAdapter...sederhana bukan ??
37: Private Sub GetData(ByVal startRecord As Integer, _
38: ByVal maxRecord As Integer)
39: Using sqlConn As New SqlConnection _
40: ("Database=Northwind;Server=localhost;" & _
41: "Integrated Security=SSPI")
42: Using sqlDa As New SqlDataAdapter _
43: ("Select CustomerID,CompanyName From Customers", _
44: sqlConn)
45:
46: Dim dsCustomers As New DataSet
47:
48: sqlDa.Fill(dsCustomers, startRecord, _
49: maxRecord, "dtCustomers")
50:
51: DataGridView1.DataSource = _
52: dsCustomers.Tables("dtCustomers")
53:
54: End Using
55: End Using
56: End Sub
57:
58: '//prosedur untuk menampilkan status record index :
59: Private Sub SetRecordLabel()
60: Label2.Text = "Start Index Record : " + _
61: intStartRec.ToString + _
62: " From total record : " + intTotalRec.ToString
63: End Sub
64:
65: '//prosedur event handler Form Load :
66: Private Sub Form1_Load(ByVal sender As System.Object, _
67: ByVal e As System.EventArgs) Handles MyBase.Load
68: '//jumlah record per page
69: intRecPerPage = NumericUpDown1.Value
70:
71: '//index record awal
72: intStartRec = 0
73:
74: GetData(intStartRec, intRecPerPage)
75: intTotalRec = GetTotalRecord()
76: SetRecordLabel()
77: End Sub
78:
79: '//prosedur untuk melakukan navigasi record.
80: '//Jumlah record per page ditentukan
81: '// dari nilai numericupdown yang di set user.
82: '//Disini numericupdownya saya set min value nya ke 1 :
83: Private Sub btnFirst_Click(ByVal sender As System.Object, _
84: ByVal e As System.EventArgs) Handles btnFirst.Click
85: intRecPerPage = NumericUpDown1.Value
86: intStartRec = 0
87: GetData(intStartRec, intRecPerPage)
88: SetRecordLabel()
89: End Sub
90:
91: '//prosedur untuk melakukan navigasi record :
92: Private Sub btnPrevious_Click(ByVal sender As System.Object, _
93: ByVal e As System.EventArgs) Handles btnPrevious.Click
94: intRecPerPage = NumericUpDown1.Value
95: intStartRec -= intRecPerPage
96: 'cek jika start index recordnya < 0
97: 'maka berarti recordnya sudah tidak ada lagi
98: '(stop Previous!)
99: If intStartRec >= 0 Then
100: GetData(intStartRec, intRecPerPage)
101: SetRecordLabel()
102: Else
103: 'reset kembali start record indexnya
104: intStartRec += intRecPerPage
105: End If
106: End Sub
107:
108: '//prosedur untuk melakukan navigasi record :
109: Private Sub btnNext_Click(ByVal sender As System.Object, _
110: ByVal e As System.EventArgs) Handles btnNext.Click
111: intRecPerPage = NumericUpDown1.Value
112: intStartRec += intRecPerPage
113: 'cek jika start index recordnya sama dengan
114: 'jumlah record total atau
115: 'lebih besar dari total record
116: 'maka berarti recordnya sudah tidak ada lagi(stop Next!)
117: If intStartRec < GetTotalRecord() Then
118: GetData(intStartRec, intRecPerPage)
119: SetRecordLabel()
120: Else
121: 'reset kembali start record indexnya
122: intStartRec -= intRecPerPage
123: End If
124: End Sub
125:
126: '//prosedur untuk melakukan navigasi record :
127: Private Sub btnLast_Click(ByVal sender As System.Object, _
128: ByVal e As System.EventArgs) Handles btnLast.Click
129: intRecPerPage = NumericUpDown1.Value
130: intTotalRec = GetTotalRecord()
131: intStartRec = intTotalRec - intRecPerPage
132: GetData(intStartRec, intRecPerPage)
133: SetRecordLabel()
134: End Sub
135:
136: End Class
137: