Paging DataGidView Winform Control dengan TableAdapter

Posted at : Feb/20/2007
5803 Views | 2 Comments

Pada artikel sebelumnya saya telah menuliskan tentang bagaimana caranya menambahkan fitur paging pada control datagrid winforms dengan menggunakan DataAdapter. Sekarang saya akan berikan contoh paging untuk control datagrid winforms tetapi dengan menggunakan TableAdapter. 
TableAdapter merupakan component baru yang terdapat didalam Visual Studio 2005 yang digunakan sebagai pengganti alternatif lain untuk penggunaan DataAdapter. Meskipun sebenarnya code behind dari komponen tersebut juga menggunakan DataAdapter...

Untuk membuat fitur tersebut saya akan memanfaatkan fungsi baru yang terdapat di Sql Server 2005 yaitu row_number seperti yang telah saya terangkan di artikel sebelumnya...

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 :

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

stored proc tsb mempunyai dua buah parameter yang digunakan untuk filtering jumlah record yang akan ditampilkan. CTE nya didefinisikan dengan "With cteProduct As"...on the next article i will explain about Common Table Expression...Setelah cte nya dibuat maka kita tinggal lakukan filtering jumlah recordnya lewat cte tsb dengan menggunakan clausa Where pada Select statementnya.

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 :

   1:  Imports System.Data.SqlClient
   2:   
   3:  Public Class Form1
   4:   
   5:  #Region "Variables Declaration"
   6:      Private intStartRec, intRecPerPage, _
   7:      intTotalRec As Integer
   8:   
   9:      Private taProduct As _
  10:      AdventureWorksDataSetTableAdapters.GetProductPagingTableAdapter
  11:   
  12:      Private tblProduct As DataTable
  13:  #End Region
  14:   
  15:  #Region "Procedures"
  16:      '//Prosedur ini digunakan untuk membatasi 
  17:      '//jumlah record yang akan ditampilkan
  18:      Private Sub GetData(ByVal startRecord As Integer, _
  19:      ByVal maxRecord As Integer)
  20:          taProduct = New _
  21:          AdventureWorksDataSetTableAdapters.GetProductPagingTableAdapter
  22:          tblProduct = taProduct.GetData(startRecord, maxRecord)
  23:          DataGridView1.DataSource = tblProduct
  24:      End Sub
  25:   
  26:      Private Sub SetRecordLabel()
  27:          Label2.Text = "Start Record Number : " + _
  28:          (intStartRec + 1).ToString + _
  29:          " From total record : " + intTotalRec.ToString
  30:      End Sub
  31:  #End Region
  32:   
  33:  #Region "Events"
  34:      Private Sub Form1_Load(ByVal sender As System.Object, _
  35:      ByVal e As System.EventArgs) Handles MyBase.Load
  36:          '//jumlah record per page
  37:          intRecPerPage = NumericUpDown1.Value
  38:   
  39:          '//index record awal
  40:          intStartRec = 0
  41:   
  42:          GetData(intStartRec, intRecPerPage)
  43:          intTotalRec = taProduct.GetTotalRecord
  44:          SetRecordLabel()
  45:      End Sub
  46:   
  47:      Private Sub btnFirst_Click(ByVal sender As System.Object, _
  48:      ByVal e As System.EventArgs) Handles btnFirst.Click
  49:          intRecPerPage = NumericUpDown1.Value
  50:          intStartRec = 0
  51:          GetData(intStartRec, intRecPerPage)
  52:          SetRecordLabel()
  53:      End Sub
  54:   
  55:      Private Sub btnPrevious_Click(ByVal sender As System.Object, _
  56:      ByVal e As System.EventArgs) Handles btnPrevious.Click
  57:          intRecPerPage = NumericUpDown1.Value
  58:          intStartRec -= intRecPerPage
  59:   
  60:          'cek jika start index recordnya < 0
  61:          'maka berarti recordnya sudah tidak ada lagi
  62:          ' (stop Previous!!)
  63:          If intStartRec >= 0 Then
  64:              GetData(intStartRec + 1, intStartRec + intRecPerPage)
  65:              SetRecordLabel()
  66:          Else
  67:              'reset kembali start record indexnya
  68:              intStartRec += intRecPerPage
  69:          End If
  70:      End Sub
  71:   
  72:      Private Sub btnNext_Click(ByVal sender As System.Object, _
  73:      ByVal e As System.EventArgs) Handles btnNext.Click
  74:          intRecPerPage = NumericUpDown1.Value
  75:          intStartRec += intRecPerPage
  76:   
  77:          'cek jika start index recordnya sama dengan 
  78:          'jumlah record total atau lebih besar dari total record
  79:          'maka berarti recordnya sudah tidak ada lagi 
  80:          '(stop Next!!)
  81:          If intStartRec < taProduct.GetTotalRecord() Then
  82:              GetData(intStartRec + 1, intStartRec + intRecPerPage)
  83:              SetRecordLabel()
  84:          Else
  85:              'reset kembali start record indexnya
  86:              intStartRec -= intRecPerPage
  87:          End If
  88:      End Sub
  89:   
  90:      Private Sub btnLast_Click(ByVal sender As System.Object, _
  91:      ByVal e As System.EventArgs) Handles btnLast.Click
  92:          intRecPerPage = NumericUpDown1.Value
  93:          intTotalRec = taProduct.GetTotalRecord()
  94:          intStartRec = intTotalRec - intRecPerPage
  95:          GetData(intStartRec, intTotalRec)
  96:          SetRecordLabel()
  97:      End Sub
  98:  #End Region
  99:   
 100:  End Class

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...Apa itu Partial Class?? I'll promise to you to explain those on the next article...so kembali ke laptop :)

Ok...yang akan kita extend yaitu Class TableAdapter yang sudah digenerate di atas. Here is the code :

   1:  Namespace AdventureWorksDataSetTableAdapters
   2:      Partial Public Class GetProductPagingTableAdapter
   3:          Private intTotalRec As Integer
   4:   
   5:          Public Function GetTotalRecord() As Integer
   6:              Using sqlCmd As New SqlCommand
   7:                  Using sqlConn As New _
   8:                  SqlConnection( _
   9:                  "Database=AdventureWorks;Server=.\SqlDev2k5;" & _
  10:                  "Integrated Security=SSPI")
  11:   
  12:                      sqlCmd.CommandType = CommandType.Text
  13:                      sqlCmd.Connection = sqlConn
  14:                      sqlCmd.CommandText = _
  15:                      "Select Count(*) From Production.Product"
  16:   
  17:                      If sqlConn.State <> ConnectionState.Open _
  18:                      Then sqlConn.Open()
  19:   
  20:                      intTotalRec = Convert.ToInt32( _
  21:                      sqlCmd.ExecuteScalar)
  22:                      Return intTotalRec
  23:                  End Using
  24:              End Using
  25:          End Function
  26:      End Class
  27:  End Namespace
Oh ya class ini anda tambahkan setelah "End Class" dari class Form yang digunakan.
Here is the screen shot of the result :


[Comments]

web development comp (Aug/28/2009 10:59:44)
Quite inspiring, Thanks for bringing this up
integer manual (Oct/06/2010 08:53:42)

share infonya sangat membantu saya, thx


[Write your comment]

Name (required)

Email (required-will not published)

Comment
2375
Input code above below (Case Sensitive) :

ABOUT ME

Rully Yulian MF
Rully Yulian Muhammad Firmansyah | Founder & IT Trainer Native Enterprise | MCT (2008-2019) | MVP (2009-2016) | Xamarin Certified Professional | MTA | MCAD | MCPD | MOS | Bandung, West Java, Indonesia.

[Read More...]

TOP DOWNLOAD

Mapping Hak Akses User Pada MenuStrip Sampai Control Button
downloaded 6983 times

Bagaimana caranya menginstal database ketika deploying sebuah aplikasi?
downloaded 4893 times

Simple Voice Engine Application With Sound Player Class...
downloaded 4045 times

Change Group,Sort Order, Filtering By Date in Crystal Reports
downloaded 3460 times

WinForms DataGrid Paging With SqlDataAdapter
downloaded 2881 times


LINKS

CERTIFICATIONS

Xamarin Certified
MOS 2007
MCT
MCPD
MCTS
MCAD.NET
ASP.NET Brainbench

NATIVE ENTERPRISE

Native Enterprise - IT Training

FOLLOW ME

Youtube  Facebook  Instagram  LinkedIn   Twitter

RSS


NATIVE ENTERPRISE NEWS

© Copyright 2006 - 2024   Rully Yulian MF   All rights reserved.