DataList Control Paging dengan memanfaatkan fungsi baru row_number() di Sql Server 2005

Created at : Feb/22/2007   [Click this link to download code sample]
2605 Views   5 Comments

Seperti yang sudah saya janjikan sebelumnya pada artikel terdahulu bahwa saya akan memberikan contoh penggunaan fitur Paging pada control DataList. Control DataList dan Repeater tidak mempunyai fitur untuk melakukan paging seperti GridView yang dapat dengan mudah untuk melakukan paging.

Di bawah ini saya berikan contoh DataList yang dapat melakukan paging dengan memanfaatkan fungsi baru yang terdapat di sql server 2005 yaitu row_number(). Sebenarnya mungkin ada alternatif lainnya yang lebih mudah yaitu dengan menggunakan DataAdapter seperti di artikel saya sebelumnya untuk control Winform DataGrid yang secara prinsip caranya sama seperti itu.

Penggunaan fungsi row_number sudah saya bahas di artikel ini... Contoh aplikasi ini menggunakan database AdventureWorks dari object view HumanResources.vEmployeeDepartment. Aplikasi ini hanya dapat bekerja di sql server 2005, karena di sql server 2000 belum terdapat fungsi row_number(). Berikut langkah-langkahnya :

1. Buat store procedure seperti dibawah ini pada database AdventureWorks :

CREATE Procedure EmployeePaging
@dari int,@sampai int,@jumlah int out
As
Select @jumlah = Count (*)
From HumanResources.vEmployeeDepartment;
With EmpPaging
As
(
Select row_number() Over (Order By EmployeeID) As RecNum,
EmployeeID,FirstName,JobTitle,Department
From HumanResources.vEmployeeDepartment
)
Select * From EmpPaging
Where RecNum Between @dari and @sampai

pada store proc diatas terdapat tiga buah parameter yang digunakan untuk filtering jumlah record yang akan ditampilkan dan satu buah parameter untuk menghitung jumlah record yang ada pada tabel / view yang digunakan untuk menghitung jumlah halaman nantinya. Selain itu di store proc tsb juga digunakan Common Table Expression (CTE). Atau mungkin anda bisa menggantinya dengan membuat view yang serupa.

2. Buat sebuah web template project  asp.net 2.0. Tambahkan kontrol spt di bawah ini :


3. Tambahkan elemen berikut di web.config di anatara elemen <system.web>

<anonymousIdentification enabled="true"/>
<profile>
<properties>
<add name="JumlahRecPerHalaman" defaultValue="5"
allowAnonymous="true"/>
</properties>
</profile>

4. Tambahkan code berikut di CodeFile web form nya :

   1:  using System;
   2:  using System.Data;
   3:  using System.Configuration;
   4:  using System.Collections;
   5:  using System.Web;
   6:  using System.Web.Security;
   7:  using System.Web.UI;
   8:  using System.Web.UI.WebControls;
   9:  using System.Web.UI.WebControls.WebParts;
  10:  using System.Web.UI.HtmlControls;
  11:   
  12:  public partial class DataListPaging : System.Web.UI.Page
  13:  {
  14:   
  15:      private double dblJumlahRec;
  16:      private double dblTotalHalaman;
  17:      private int intTotalHalaman;
  18:   
  19:      protected void Page_Load(object sender, EventArgs e)
  20:      {
  21:          if (!IsPostBack)
  22:          {
  23:              ddlJumlahRecPerHalaman.Items.FindByValue(
  24:                  Profile.JumlahRecPerHalaman).Selected = true;
  25:          }
  26:      }
  27:   
  28:      protected void sdsEmployee_Selecting(object sender,
  29:          SqlDataSourceSelectingEventArgs e)
  30:      {
  31:          //jika web form baru pertama kali di load
  32:          //atur recordnya dengan mengambil data 
  33:          //dari baris pertama
  34:          if (Session["dari"] == null)
  35:          {
  36:              Session["dari"] = 1;
  37:              Session["sampai"] = Profile.JumlahRecPerHalaman;
  38:   
  39:              //index halaman yang sedang aktif :
  40:              Session["pageindex"] = 1;
  41:          }
  42:          e.Command.Parameters[0].Value = Convert.ToInt32(
  43:              Session["dari"]);
  44:          e.Command.Parameters[1].Value = Convert.ToInt32(
  45:              Session["sampai"]);
  46:      }
  47:      protected void sdsEmployee_Selected(object sender,
  48:          SqlDataSourceStatusEventArgs e)
  49:      {
  50:          //hitung jumlah record dari 
  51:          //output paramater store proc :
  52:          dblJumlahRec = Convert.ToDouble(
  53:              e.Command.Parameters[2].Value);
  54:   
  55:          dblTotalHalaman = dblJumlahRec / Convert.ToDouble(
  56:              Profile.JumlahRecPerHalaman);
  57:   
  58:          //hitung total halaman (pembulatan ke atas)
  59:          //total halaman ini tergantung dari 
  60:          //Profile.JumlahRecPerHalaman
  61:          //yang diatur dari dropdownlist 
  62:          //jumlah record per halaman
  63:          //kenapa harus pake pembulatan ke atas?
  64:          //misalnya kalau jumlah recordnya ada 3 
  65:          //dan jumlah record per halamannya ada 2
  66:          // maka kalau tidak dibulatkan 
  67:          //hasilnya akan pecahan
  68:          intTotalHalaman = (int)Math.Ceiling(dblTotalHalaman);
  69:   
  70:          if (intTotalHalaman == 0) { Session["pageindex"] = 0; }
  71:          lblRecord.Text = "Hal " + Session["pageindex"].ToString() +
  72:              " dari " + intTotalHalaman.ToString() + " halaman";
  73:   
  74:          //pengaturan button navigasi (Enabled or Disabled):
  75:          if ((Convert.ToInt32(Session["pageindex"]) == 0) ||
  76:              (Convert.ToInt32(Session["pageindex"]) == 1
  77:              && intTotalHalaman == 1))
  78:          {
  79:              lbPrevious.Enabled = false;
  80:              lbNext.Enabled = false;
  81:          }
  82:          else if (Convert.ToInt32(Session["pageindex"]) >=
  83:              intTotalHalaman && intTotalHalaman != 1)
  84:          {
  85:              lbNext.Enabled = false;
  86:              lbPrevious.Enabled = true;
  87:          }
  88:          else if (Convert.ToInt32(Session["pageindex"]) == 1
  89:              && intTotalHalaman > 1)
  90:          {
  91:              lbPrevious.Enabled = false;
  92:              lbNext.Enabled = true;
  93:          }
  94:      }
  95:   
  96:      protected void lbPrevious_Click(object sender, EventArgs e)
  97:      {
  98:          Session["dari"] = Convert.ToInt32(Session["dari"])
  99:              - Convert.ToInt32(Profile.JumlahRecPerHalaman);
 100:          Session["sampai"] = Convert.ToInt32(Session["sampai"])
 101:              - Convert.ToInt32(Profile.JumlahRecPerHalaman);
 102:          Session["pageindex"] = Convert.ToInt32(
 103:              Session["pageindex"]) - 1;
 104:   
 105:          Response.Redirect("DataListPaging.aspx");
 106:      }
 107:   
 108:      protected void lbNext_Click(object sender, EventArgs e)
 109:      {
 110:          Session["dari"] = Convert.ToInt32(Session["sampai"]) + 1;
 111:          Session["sampai"] = Convert.ToInt32(Session["sampai"])
 112:              + Convert.ToInt32(Profile.JumlahRecPerHalaman);
 113:          Session["pageindex"] = Convert.ToInt32(
 114:              Session["pageindex"]) + 1;
 115:   
 116:          Response.Redirect("DataListPaging.aspx");
 117:      }
 118:   
 119:      protected void btnSetJumlahRec_Click(object sender, EventArgs e)
 120:      {
 121:          Profile.JumlahRecPerHalaman =
 122:              ddlJumlahRecPerHalaman.SelectedValue;
 123:          Session["pageindex"] = 1;
 124:          Session["dari"] = 1;
 125:          Session["sampai"] = Profile.JumlahRecPerHalaman;
 126:          Server.Transfer("DataListPaging.aspx");
 127:      }
 128:  }

5. Here is the screen shot result :


[Comments]
Codename 47 Mar/05/2008 02:26:38 :
wah bagus nih....ilmunya bermanfaat sekali buat sayaa....kebetulan saya lagi cari2 tutorial datagrid..terimakasih banyak yaa untuk ilmunya, semoga bertambah lagi ilmu anda...trims. oiya kalo bisa terus ditambah tutorial/artikel/tip n trik vb.net dan Ado.net nya yaa...
newbie Jun/18/2009 08:59:01 :
Trims ilmunya...... bagus banget buat seorang newbie spt saya. Kalo pake database Access gmn? Apa dataListnya bisa di-paging juga? Kalo bisa, gimana caranya? Trims....
Rully Jun/19/2009 02:58:51 :
Kebetulan teknik yang diatas itu hanya dapat di implementasikan di SQL Server 2005 ke atas saja :) Thx for your visiting :)
Dimas Aug/26/2009 03:28:07 :
Mas kalo codingnya di VB gimana ..? aku ga bisa C#hehehe makasih ?
Rully Aug/26/2009 04:47:03 :
@Dimas : wah harus diketik ulang lagi klo gitu mah :)...mas dimas bisa cari c# to vb.net converter di internet, ada kok :)

[Write your comment]
Name (required)
URL (optional)
Example : http://www.yulianmf.com  
Comment

0237
Input code above below (Case Sensitif) :
About Me 
Rully Yulian MF
My Name is Rully Yulian Muhammad Firmansyah. I am an IT Trainer, IT Consultant and Application Developer spesializing in Microsoft .NET technology and SQL Server database. I live in Bandung, Indonesia. My hobby is to play Guitar. [Read More...]
Top Download 
Bagaimana caranya menginstal database ketika deploying sebuah aplikasi? : Downloaded 2235 times  
Change Group,Sort Order, Filtering By Date in Crystal Reports : Downloaded 2192 times  
Simple Voice Engine Application With Sound Player Class... : Downloaded 1523 times  
DataGridView Grouping : Downloaded 1243 times  
WinForms DataGrid Paging With SqlDataAdapter : Downloaded 1232 times  
Article Category 
Links 
Award 
Certifications 
MOS 2007
MCAS
MCT
MCPD
MCTS
MCAD.NET
ASP.NET Brainbench
Native Enterprise - IT Training 
Native Enterprise Facebook Group 
My Facebook 
My LinkedIn 
Syndication (RSS 2.0) 
Powered By 
Native Enterprise News