Ok...pertama kita buat terlebih dahulu stored procedurenya. Storde
procedure ini yang melakukan paging. Disini juga digunakan fitur baru
yang ada di Sql Server 2005 yaitu Common Table Expression (CTE) yang
bisa kita gunakan untuk membuat virtual table (create table on the fly).
Database yang digunakan yaitu AdventureWorks, tabelnya tabel Production.Product.
1. Buat stored procedure :
Code:
Create Proc GetProductPaging
@from int, @to int
As
With cteProduct
As
(
Select row_number() Over(Order By ProductID ASC) As recnum,
[Name],ProductNumber
From Production.Product
)
Select * From cteProduct Where recnum Between @from And @to
2. Setelah itu buat design form seperti dibawah ini (label, numericupdown, Button, DataGridView)
3. Tambahkan TableAdapter dengan klik menu Data > Add New Data Source, pilih Database sebagai DataSource nya...Setelah itu pilih object Stored Procedure yang sudah dibuat diatas...maka hasilnya akan dibuatkan sebuah Dataset dengan TableAdapter seperti gambar dibawah ini :
4. Sekarang kita mulai membuat code nya. Tamabahkan code ini didalam class Form yang digunakan :
Code:
Imports System.Data.SqlClient
Public Class Form1
Private intStartRec, intRecPerPage, intTotalRec As Integer
Private taProduct As AdventureWorksDataSetTableAdapters.GetProductPagingTableAdapter
Private tblProduct As DataTable
Private Sub GetData(ByVal startRecord As Integer, ByVal maxRecord As Integer)
taProduct = New AdventureWorksDataSetTableAdapters.GetProductPagingTableAdapter
tblProduct = taProduct.GetData(startRecord, maxRecord)
DataGridView1.DataSource = tblProduct
End Sub
Private Sub SetRecordLabel()
Label2.Text = "Start Record Number : " + (intStartRec + 1).ToString + _
" From total record : " + intTotalRec.ToString
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
intRecPerPage = NumericUpDown1.Value '//jumlah record per page
intStartRec = 0 '//index record awal
GetData(intStartRec, intRecPerPage)
intTotalRec = taProduct.GetTotalRecord
SetRecordLabel()
End Sub
Private Sub btnFirst_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnFirst.Click
intRecPerPage = NumericUpDown1.Value
intStartRec = 0
GetData(intStartRec, intRecPerPage)
SetRecordLabel()
End Sub
Private Sub btnPrevious_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPrevious.Click
intRecPerPage = NumericUpDown1.Value
intStartRec -= intRecPerPage
'cek jika start index recordnya < 0
'maka berarti recordnya sudah tidak ada lagi (stop Previous!!)
If intStartRec >= 0 Then
GetData(intStartRec + 1, intStartRec + intRecPerPage)
SetRecordLabel()
Else
'reset kembali start record indexnya
intStartRec += intRecPerPage
End If
End Sub
Private Sub btnNext_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNext.Click
intRecPerPage = NumericUpDown1.Value
intStartRec += intRecPerPage
'cek jika start index recordnya sama dengan jumlah record total
'atau lebih besar dari total record
'maka berarti recordnya sudah tidak ada lagi (stop Next!!)
If intStartRec < taProduct.GetTotalRecord() Then
GetData(intStartRec + 1, intStartRec + intRecPerPage)
SetRecordLabel()
Else
'reset kembali start record indexnya
intStartRec -= intRecPerPage
End If
End Sub
Private Sub btnLast_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLast.Click
intRecPerPage = NumericUpDown1.Value
intTotalRec = taProduct.GetTotalRecord()
intStartRec = intTotalRec - intRecPerPage
GetData(intStartRec, intTotalRec)
SetRecordLabel()
End Sub
End Class
5. Setelah itu kita akan tambahkan sebuah fungsi untuk menghitung jumlah total record yang ada pada tabel tsb dengan memanfaatkan fitur baru yang terdapat didalam VB 2005 dan juga C# 2005 pada fitur OOP nya yaitu Partial Class.
Yang akan kita extend yaitu Class TableAdapter yang sudah digenerate di atas.
Code:
Namespace AdventureWorksDataSetTableAdapters
Partial Public Class GetProductPagingTableAdapter
Private intTotalRec As Integer
Public Function GetTotalRecord() As Integer
Using sqlCmd As New SqlCommand
Using sqlConn As New SqlConnection("Database=AdventureWorks;Server=.\SqlDev2k5;Integrated Security=SSPI")
sqlCmd.CommandType = CommandType.Text
sqlCmd.Connection = sqlConn
sqlCmd.CommandText = "Select Count(*) From Production.Product"
If sqlConn.State <> ConnectionState.Open Then sqlConn.Open()
intTotalRec = Convert.ToInt32(sqlCmd.ExecuteScalar)
Return intTotalRec
sqlConn.Close()
End Using
End Using
End Function
End Class
End Namespace
Hasilnya :
Download source code :
Code:
http://newbiebanget.fileave.com/PagingDenganTA.rar
Database yang digunakan yaitu AdventureWorks, tabelnya tabel Production.Product.
1. Buat stored procedure :
Code:
Create Proc GetProductPaging
@from int, @to int
As
With cteProduct
As
(
Select row_number() Over(Order By ProductID ASC) As recnum,
[Name],ProductNumber
From Production.Product
)
Select * From cteProduct Where recnum Between @from And @to
2. Setelah itu buat design form seperti dibawah ini (label, numericupdown, Button, DataGridView)
3. Tambahkan TableAdapter dengan klik menu Data > Add New Data Source, pilih Database sebagai DataSource nya...Setelah itu pilih object Stored Procedure yang sudah dibuat diatas...maka hasilnya akan dibuatkan sebuah Dataset dengan TableAdapter seperti gambar dibawah ini :
4. Sekarang kita mulai membuat code nya. Tamabahkan code ini didalam class Form yang digunakan :
Code:
Imports System.Data.SqlClient
Public Class Form1
Private intStartRec, intRecPerPage, intTotalRec As Integer
Private taProduct As AdventureWorksDataSetTableAdapters.GetProductPagingTableAdapter
Private tblProduct As DataTable
Private Sub GetData(ByVal startRecord As Integer, ByVal maxRecord As Integer)
taProduct = New AdventureWorksDataSetTableAdapters.GetProductPagingTableAdapter
tblProduct = taProduct.GetData(startRecord, maxRecord)
DataGridView1.DataSource = tblProduct
End Sub
Private Sub SetRecordLabel()
Label2.Text = "Start Record Number : " + (intStartRec + 1).ToString + _
" From total record : " + intTotalRec.ToString
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
intRecPerPage = NumericUpDown1.Value '//jumlah record per page
intStartRec = 0 '//index record awal
GetData(intStartRec, intRecPerPage)
intTotalRec = taProduct.GetTotalRecord
SetRecordLabel()
End Sub
Private Sub btnFirst_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnFirst.Click
intRecPerPage = NumericUpDown1.Value
intStartRec = 0
GetData(intStartRec, intRecPerPage)
SetRecordLabel()
End Sub
Private Sub btnPrevious_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPrevious.Click
intRecPerPage = NumericUpDown1.Value
intStartRec -= intRecPerPage
'cek jika start index recordnya < 0
'maka berarti recordnya sudah tidak ada lagi (stop Previous!!)
If intStartRec >= 0 Then
GetData(intStartRec + 1, intStartRec + intRecPerPage)
SetRecordLabel()
Else
'reset kembali start record indexnya
intStartRec += intRecPerPage
End If
End Sub
Private Sub btnNext_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNext.Click
intRecPerPage = NumericUpDown1.Value
intStartRec += intRecPerPage
'cek jika start index recordnya sama dengan jumlah record total
'atau lebih besar dari total record
'maka berarti recordnya sudah tidak ada lagi (stop Next!!)
If intStartRec < taProduct.GetTotalRecord() Then
GetData(intStartRec + 1, intStartRec + intRecPerPage)
SetRecordLabel()
Else
'reset kembali start record indexnya
intStartRec -= intRecPerPage
End If
End Sub
Private Sub btnLast_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLast.Click
intRecPerPage = NumericUpDown1.Value
intTotalRec = taProduct.GetTotalRecord()
intStartRec = intTotalRec - intRecPerPage
GetData(intStartRec, intTotalRec)
SetRecordLabel()
End Sub
End Class
5. Setelah itu kita akan tambahkan sebuah fungsi untuk menghitung jumlah total record yang ada pada tabel tsb dengan memanfaatkan fitur baru yang terdapat didalam VB 2005 dan juga C# 2005 pada fitur OOP nya yaitu Partial Class.
Yang akan kita extend yaitu Class TableAdapter yang sudah digenerate di atas.
Code:
Namespace AdventureWorksDataSetTableAdapters
Partial Public Class GetProductPagingTableAdapter
Private intTotalRec As Integer
Public Function GetTotalRecord() As Integer
Using sqlCmd As New SqlCommand
Using sqlConn As New SqlConnection("Database=AdventureWorks;Server=.\SqlDev2k5;Integrated Security=SSPI")
sqlCmd.CommandType = CommandType.Text
sqlCmd.Connection = sqlConn
sqlCmd.CommandText = "Select Count(*) From Production.Product"
If sqlConn.State <> ConnectionState.Open Then sqlConn.Open()
intTotalRec = Convert.ToInt32(sqlCmd.ExecuteScalar)
Return intTotalRec
sqlConn.Close()
End Using
End Using
End Function
End Class
End Namespace
Hasilnya :
Download source code :
Code:
http://newbiebanget.fileave.com/PagingDenganTA.rar
Tidak ada komentar:
Posting Komentar