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

Posted at : Feb/22/2007
11084 Views

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 :


ABOUT ME

Rully Yulian MF
Rully Yulian Muhammad Firmansyah | Co-Founder & IT Trainer at Native Enterprise | Microsoft Azure Data Scientist | IBM RAG & Agentic AI | IBM Data Science & Data Analyst | Python Certified (PCEP, PCAP) | MOS, MTA, Xamarin Certified, ex MCT | ex MVP

CERTIFICATIONS

Microsoft Certified Associate
IBM RAG and Agentic AI Professional
IBM Data Science Professional IBM Data Analyst Professional
PCAP Associate Python Programmer Certified PCEP Entry Level Python Programmer Certified
Xamarin Certified
MOS 2007
MCPD MCTS
MCAD.NET

NATIVE ENTERPRISE

Native Enterprise - IT Training

FOLLOW ME

Youtube  X Twitter Facebook  Instagram  LinkedIn

RSS


NATIVE ENTERPRISE NEWS

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