The
DataGrid Kontrol web memiliki built-in otomatis atau Custom Paging
fungsi; Namun,
DataGrid Windows control tidak memiliki fitur ini. Artikel ini menunjukkan
bagaimana membangun mekanisme paging sederhana untuk
DataGrid Windows control.
Contoh kode dalam artikel ini membuat
penggunaan
DataSet objek. Dalam ADO.NET,
DataSet objek dipenuhi dalam satu operasi dan berada di dalam memori semua
waktu. Jika Anda bekerja dengan besar
DataSet, artikel ini menjelaskan cara menampilkan data dalam potongan atau
Halaman pemrograman.
Teknik ini memiliki beberapa keterbatasan. Mohon
Lihat
Pemecahan Masalah bagian untuk
informasi lebih lanjut.
Persyaratan
- Microsoft Visual Basic.NET
- Microsoft SQL Server Northwind database contoh
Langkah-langkah untuk menambahkan Paging untuk mengontrol DataGrid Windows
Ketika Anda halaman
DataGrid, Anda menampilkan data dalam halaman-ukuran "potongan," itu adalah, satu halaman
Catatan pada satu waktu. Contoh kode untuk mengikuti salinan
DataRow objek untuk setiap halaman dari
DataSet dalam memori untuk sementara meja. Tabel sementara kemudian terikat
untuk
DataGrid kontrol.
- Buka baru Visual Basic.Aplikasi NET Windows. Form1 adalah
dibuat secara default.
- Tambahkan DataGrid kontrol, dan menetapkan yang ReadOnly properti untuk Benar.
- Menempatkan kontrol tambahan berikut pada Form1, dan mengatur
sifat-sifat mereka seperti yang ditunjukkan di bawah ini:
Perkecil tabel iniPerbesar tabel ini
| Kontrol | Nama properti | Teks properti |
|---|
| Tombol | btnFirstPage | Halaman pertama |
| Tombol | btnNextPage | Halaman berikutnya |
| TextBox | txtDisplayPageNo | |
| Tombol | btnPreviousPage | Halaman sebelumnya |
| Tombol | btnLastPage | Halaman terakhir |
| TextBox | txtPageSize | 5 |
| Tombol | btnFillGrid | Mengisi Grid |
- Copy dan paste kode berikut ke Form1's umum
Deklarasi bagian:
Imports System
Imports System.Data
Imports System.Data.SqlClient
- Copy dan paste kode berikut sebelum wilayah ini "Windows Form Designer dihasilkan kode" yang menyatakan
level format variabel untuk Form1:
Private da As SqlDataAdapter
Private ds As DataSet
Private dtSource As DataTable
Private PageCount As Integer
Private maxRec As Integer
Private pageSize As Integer
Private currentPage As Integer
Private recNo As Integer
- Menghapus kode dihasilkan otomatis berikut untuk Beban acara Form1.
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles MyBase.Load
End Sub
- Copy dan paste kode berikut Setelah region "Windows Form Designer dihasilkan kode":
Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
'Open Connection.
Dim conn As SqlConnection = New SqlConnection( _
"Server=(local)\netsdk;uid=sa;pwd=;database=northwind")
'Set the DataAdapter's query.
da = New SqlDataAdapter("select * from customers", conn)
ds = New DataSet()
' Fill the DataSet.
da.Fill(ds, "customers")
' Set the source table.
dtSource = ds.Tables("customers")
End Sub
Private Sub btnNextPage_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnNextPage.Click
'If the user did not click the "Fill Grid" button then Return
If Not CheckFillButton() Then Return
'Check if the user clicked the "Fill Grid" button.
If pageSize = 0 Then
MessageBox.Show("Set the Page Size, and then click the ""Fill Grid"" button!")
Return
End If
currentPage = currentPage + 1
If currentPage > PageCount Then
currentPage = PageCount
'Check if you are already at the last page.
If recNo = maxRec Then
MessageBox.Show("You are at the Last Page!")
Return
End If
End If
LoadPage()
End Sub
Private Sub btnPreviousPage_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnPreviousPage.Click
If Not CheckFillButton() Then Return
If currentPage = PageCount Then
recNo = pageSize * (currentPage - 2)
End If
currentPage = currentPage - 1
'Check if you are already at the first page.
If currentPage < 1 Then
MessageBox.Show("You are at the First Page!")
currentPage = 1
Return
Else
recNo = pageSize * (currentPage - 1)
End If
LoadPage()
End Sub
Private Sub LoadPage()
Dim i As Integer
Dim startRec As Integer
Dim endRec As Integer
Dim dtTemp As DataTable
Dim dr As DataRow
'Duplicate or clone the source table to create the temporary table.
dtTemp = dtSource.Clone
If currentPage = PageCount Then
endRec = maxRec
Else
endRec = pageSize * currentPage
End If
startRec = recNo
'Copy the rows from the source table to fill the temporary table.
For i = startRec To endRec - 1
dtTemp.ImportRow(dtSource.Rows(i))
recNo = recNo + 1
Next
DataGrid1.DataSource = dtTemp
DisplayPageInfo()
End Sub
Private Sub btnFirstPage_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnFirstPage.Click
If Not CheckFillButton() Then Return
' Check if you are already at the first page.
If currentPage = 1 Then
MessageBox.Show("You are at the First Page!")
Return
End If
currentPage = 1
recNo = 0
LoadPage()
End Sub
Private Sub btnLastPage_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnLastPage.Click
If Not CheckFillButton() Then Return
' Check if you are already at the last page.
If recNo = maxRec Then
MessageBox.Show("You are at the Last Page!")
Return
End If
currentPage = PageCount
recNo = pageSize * (currentPage - 1)
LoadPage()
End Sub
Private Sub DisplayPageInfo()
txtDisplayPageNo.Text = "Page " & currentPage.ToString & "/ " & PageCount.ToString
End Sub
Private Sub btnFillGrid_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnFillGrid.Click
'Set the start and max records.
pageSize = txtPageSize.Text
maxRec = dtSource.Rows.Count
PageCount = maxRec \ pageSize
' Adjust the page number if the last page contains a partial page.
If (maxRec Mod pageSize) > 0 Then
PageCount = PageCount + 1
End If
'Initial seeings
currentPage = 1
recNo = 0
' Display the content of the current page.
LoadPage()
End Sub
Private Function CheckFillButton() As Boolean
'Check if the user clicks the "Fill Grid" button.
If pageSize = 0 Then
MessageBox.Show("Set the Page Size, and then click the ""Fill Grid"" button!")
CheckFillButton = False
Else
CheckFillButton = True
End If
End Function
- Memodifikasi ConnectionString parameter dalam kode jadi itu poin untuk contoh yang ada
Northwind database.
- Tekan tombol F5 untuk membangun dan menjalankan proyek.
- Secara default, ukuran halaman diatur ke 5 Catatan, sehingga Anda dapat
perubahan dalam kotak teks.
- Klik Mengisi Grid. Perhatikan bahwa Grid diisi dengan 5 records.
- Klik Halaman pertama, Halaman berikutnya, Halaman sebelumnya, dan Halaman terakhir untuk menelusuri antara halaman.
Pemecahan Masalah
- Teknik ini hanya bekerja untuk hanya-baca DataGrid kontrol. Ketika Anda mengimpor berturut-turut untuk sementara DataTable objek, Anda membuat salinan. Dengan demikian, perubahan yang Anda buat tidak akan
disimpan ke meja utama.
- Teknik ini tidak bekerja (dan juga tidak koleksi
atau sebuah array) jika Anda ingin agar pengguna dapat menavigasi ke anak records
melalui DataRelation objek atau jika Anda memiliki catatan yang terkait di orangtua-anak
hubungan yang muncul pada formulir pada waktu yang sama.
Untuk informasi lebih lanjut tentang ADO.NET, melihat MSDN berikut
Situs web:
Untuk selengkapnya, lihat Microsoft.NET Framework SDK
Dokumentasi: