Pertama buat tabel (membutuhkan penomoran ID otomatis):
buat tabel file berambut merah(
id ke dalam identitas(1,1),
nama file nvarchar(20),
kirim pengguna nvarchar(20),
kunci utama (id)
)
Kemudian kami menulis 500.000 catatan:
nyatakan @i int
atur @i=1
sementara @i<=500000
mulai
masukkan ke dalam nilai file berambut merah (nama file, pengguna pengirim) ('algoritma paging saya', 'Lu Junming')
atur @i=@i+1
akhir
PERGI
Gunakan Microsoft Visual Studio .NET 2003 untuk membuat halaman web WebForm (saya menamakannya webform8.aspx)
Cuplikan kode front-end adalah sebagai berikut (webform8.aspx):
<%@ Halaman bahasa="c#" Codebehind="WebForm8.aspx.cs" AutoEventWireup="false" Inherits="WebApplication6.WebForm8" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transisi//EN" >
<HTML>
<KEPALA>
<title>WebForm8</title>
<meta content="Microsoft Visual Studio .NET 7.1" nama="GENERATOR">
<meta content="C#" name="CODE_LANGUAGE">
<meta content="JavaScript" name="vs_defaultClientScript">
<meta content=" http://schemas.microsoft.com/intellisense/ie5 " name="vs_targetSchema">
</KEPALA>
<badan MS_POSITIONING="GridLayout">
<form id="Form1" metode="posting" runat="server">
<asp:datalist id="datalist1" AlternatingItemStyle-BackColor="#f3f3f3" Lebar="100%" CellSpacing="0"
CellPadding="0" Runat="server">
<Templat Barang>
<lebar tabel="100%" border="0" Cellspacing="0" cellpadding="0">
<tr>
<td width="30%"
align="center"><%#DataBinder.Eval(Container.DataItem,"nama file")%></td>
<td width="30%"
align="center"><%#DataBinder.Eval(Container.DataItem,"senduser")%></td>
<td width="30%"
align="center"><%#DataBinder.Eval(Container.DataItem,"id")%></td>
</tr>
</tabel>
</Templat Barang>
</asp:daftar data>
<div align="center">Total<asp:label id="LPageCount" Runat="server" ForeColor="#ff0000"></asp:label>Halaman/Total
<asp:label id="LRecordCount" Runat= "server" ForeColor="#ff0000"></asp:label>Rekam
<asp:linkbutton id="Fistpage" Runat="server"
CommandName="0">Beranda</asp:linkbutton> <asp:linkbutton id="Prevpage" Runat="server" CommandName ="prev">
Halaman sebelumnya</asp:linkbutton> <asp:linkbutton id="Nextpage" Runat="server"
CommandName="next">Halaman berikutnya</asp:linkbutton >  ; <asp:linkbutton id="Lastpage" Runat="server"
CommandName="last">Halaman terakhir</asp:linkbutton> Halaman saat ini<asp: label id ="LCurrentPage" Runat="server"
ForeColor="#ff0000"></asp:label>Halaman Lompat halaman<asp:TextBox ID="gotoPage" Runat="server" Lebar ="30px "
MaxLength="5" AutoPostBack="Benar"></asp:TextBox></div>
</bentuk>
</tubuh>
</HTML>
Cuplikan kode latar belakang adalah sebagai berikut (webform8.aspx.cs)
menggunakan Sistem;
menggunakan Sistem.Koleksi;
menggunakan Sistem.ComponentModel;
menggunakan Sistem.Data;
menggunakan Sistem.Gambar;
menggunakan Sistem.Web;
menggunakan Sistem.Web.SessionState;
menggunakan Sistem.Web.UI;
menggunakan Sistem.Web.UI.WebControls;
menggunakan Sistem.Web.UI.HtmlControls;
menggunakan Sistem.Data.SqlClient;
menggunakan System.Configuration;
namespace WebApplication6
{
/// <ringkasan>
/// Deskripsi ringkasan WebForm8.
/// </ringkasan>
WebForm8 kelas publik : Sistem.Web.UI.Halaman
{
dilindungi System.Web.UI.WebControls.LinkButton Fistpage;
dilindungi System.Web.UI.WebControls.LinkButton Halaman Sebelumnya;
dilindungi System.Web.UI.WebControls.LinkButton Nextpage;
halaman terakhir System.Web.UI.WebControls.LinkButton yang dilindungi;
dilindungi System.Web.UI.WebControls.DataList datalist1;
dilindungi System.Web.UI.WebControls.DropDownList mydroplist;
Sistem.Web.UI.WebControls.Label LPageCount yang dilindungi;
Sistem.Web.UI.WebControls.Label LRecordCount yang dilindungi;
Sistem.Web.UI.WebControls.Label LCurrentPage dilindungi;
dilindungi System.Web.UI.WebControls.TextBox gotoPage;
const int PageSize=20; //Tentukan catatan yang ditampilkan pada setiap halaman
int PageCount,RecCount,CurrentPage,Pages,JumpPage;//Tentukan beberapa variabel untuk menyimpan parameter paging
private void Page_Load(pengirim objek, System.EventArgs e)
{
jika(!IsPostBack)
{
RecCount = Calc();//Dapatkan jumlah total record melalui fungsi Calc()
PageCount = RecCount/PageSize + OverPage();//Hitung jumlah total halaman (ditambah fungsi OverPage() untuk mencegah sisanya menyebabkan
data tampilan tidak lengkap)
ViewState["PageCounts"] = RecCount/PageSize -
ModPage();/ /Simpan parameter halaman Total ke ViewState (dikurangi fungsi ModPage() untuk mencegah rentang kueri meluap ketika pernyataan SQL dijalankan. Anda dapat menggunakan algoritma paging prosedur tersimpan untuk memahami kalimat ini)
ViewState["PageIndex"] = 0;//Simpan nilai indeks halaman 0 ke ViewState
ViewState["JumpPages"] = PageCount;//Simpan PageCount ke ViewState, dan tentukan apakah nomor input pengguna melebihi rentang
nomor halaman
saat melompat.
//Menampilkan status LPageCount dan LRecordCount
LPageCount.Teks = PageCount.ToString();
LRecordCount.Teks = RecCount.ToString();
//Tentukan apakah kotak teks lompat halaman tidak valid
jika(Hitungan Ulang <= 20)
gotoPage.Enabled = salah;
TDataBind();//Panggil fungsi pengikatan data TDataBind() untuk melakukan operasi pengikatan data
}
}
//Hitung halaman yang tersisa
publik int OverPage()
{
int halaman = 0;
jika(RecCount%Ukuran Halaman != 0)
halaman = 1;
kalau tidak
halaman = 0;
halaman kembali;
}
//Hitung halaman yang tersisa untuk mencegah rentang kueri meluap ketika pernyataan SQL dijalankan.
Halaman Mod int publik()
{
int halaman = 0;
if(RecCount%PageSize == 0 && RecCount != 0)
halaman = 1;
kalau tidak
halaman = 0;
halaman kembali;
}
/*
*Fungsi statis untuk menghitung total catatan
*Alasan mengapa saya menggunakan fungsi statis di sini adalah: jika data statis atau fungsi statis direferensikan, konektor akan mengoptimalkan kode yang dihasilkan dan menghapus item relokasi dinamis (
efek paging dari tabel data besar lebih jelas).
*Saya harap Anda mau memberikan pendapat Anda dan mengoreksi saya jika ada kesalahan.
*/
Calc int statis publik()
{
int Jumlah Catatan = 0;
SqlCommand MyCmd = new SqlCommand("pilih hitungan(*) sebagai co dari file berambut merah",MyCon());
SqlDataReader dr = MyCmd.ExecuteReader();
jika(dr.Baca())
RecordCount = Int32.Parse(dr["co"].ToString());
MyCmd.Koneksi.Tutup();
kembalikan RecordCount;
}
//Pernyataan koneksi database (diperoleh dari Web.Config)
SqlConnection MyCon() statis publik
{
SqlConnection MyConnection = SqlConnection baru(ConfigurationSettings.AppSettings["DSN"]);
Koneksi Saya.Terbuka();
kembalikan Koneksi Saya;
}
//Operasikan nilai CommandName yang dikembalikan oleh empat tombol (Halaman Beranda, Halaman Sebelumnya, Halaman Berikutnya, Halaman Terakhir)
private void Page_OnClick(pengirim objek, CommandEventArgs e)
{
CurrentPage = (int)ViewState["PageIndex"];//Baca nilai nomor halaman dari ViewState dan simpan ke variabel CurrentPage untuk
perhitungan
parameter
Pages = (int)ViewState["PageCounts"];//Baca string operasi parameter halaman total dari ViewState
cmd = e.CommandName;
switch(cmd)//Filter Nama Perintah
{
kasus "berikutnya":
Halaman Saat Ini++;
merusak;
kasus "sebelumnya":
Halaman Saat Ini--;
merusak;
kasus "terakhir":
Halaman Saat Ini = Halaman;
merusak;
bawaan:
Halaman Saat Ini = 0;
merusak;
}
ViewState["PageIndex"] = CurrentPage;//Simpan kembali variabel CurrentPage yang dihitung ke ViewState
TDataBind();//Panggil fungsi pengikatan data TDataBind()
}
kekosongan pribadi TDataBind()
{
CurrentPage = (int)ViewState["PageIndex"];//Baca nilai nomor halaman dari ViewState dan simpan ke variabel CurrentPage untuk operasi
pembatalan
tombol
Pages = (int)ViewState["PageCounts"];//Baca total parameter halaman dari ViewState untuk melakukan penghitungan pembatalan validasi tombol
//Menentukan status keempat tombol (halaman beranda, halaman sebelumnya, halaman berikutnya, halaman terakhir)
jika (Halaman Saat Ini + 1 > 1)
{
Fistpage.Enabled = benar;
Halaman Sebelumnya.Diaktifkan = true;
}
kalau tidak
{
Fistpage.Enabled = false;
Halaman Sebelumnya.Diaktifkan = false;
}
jika (Halaman Saat Ini == Halaman)
{
Halaman berikutnya.Diaktifkan = false;
Halaman Terakhir.Diaktifkan = false;
}
kalau tidak
{
Halaman berikutnya.Diaktifkan = true;
Halaman Terakhir.Diaktifkan = true;
}
//Pengikatan data ke kontrol DataList
Kumpulan Data ds = Kumpulan Data baru();
//Pernyataan inti SQL, melakukan operasi kueri (menentukan efisiensi paging :))
SqlDataAdapter MyAdapter = new SqlDataAdapter("Pilih Top "+PageSize+" * dari file berambut merah di mana id
tidak ada di dalamnya(pilih id "+PageSize*CurrentPage+" teratas dari file berambut merah diurutkan berdasarkan id asc) diurutkan berdasarkan id asc",MyCon());
MyAdapter.Fill(ds,"berita");
datalist1.DataSource = ds.Tables["berita"].DefaultView;
datalist1.DataBind();
//Display Label mengontrol LCurrentPage dan kotak teks mengontrol status gotoPage
LCurrentPage.Teks = (Halaman Saat Ini+1).ToString();
gotoPage.Teks = (Halaman Saat Ini+1).ToString();
//Lepaskan SqlDataAdapter
Adaptor Saya.Buang();
}
#kode wilayah yang dihasilkan oleh Perancang Formulir Web
ganti void OnInit yang dilindungi (EventArgs e)
{
//
// CODEGEN: Panggilan ini diperlukan oleh perancang Formulir Web ASP.NET.
//
Inisialisasi Komponen();
base.OnInit(e);
}
/// <ringkasan>
/// Desainer mendukung metode yang diperlukan - jangan gunakan editor kode untuk memodifikasi
/// Isi dari metode ini.
/// </ringkasan>
kekosongan pribadi InitializeComponent()
{
this.Fistpage.Command += Sistem.Web.UI.WebControls.CommandEventHandler baru(ini.Page_OnClick);
this.Prevpage.Command += Sistem.Web.UI.WebControls.CommandEventHandler baru(ini.Page_OnClick);
this.Nextpage.Command += Sistem.Web.UI.WebControls.CommandEventHandler baru(ini.Page_OnClick);
this.Lastpage.Command += Sistem.Web.UI.WebControls.CommandEventHandler baru(ini.Page_OnClick);
this.gotoPage.TextChanged += Sistem baru.EventHandler(ini.gotoPage_TextChanged);
ini.Muat += Sistem baru.EventHandler(ini.Page_Load)
;
#wilayah akhir
//Lompat kode halaman
private void gotoPage_TextChanged(pengirim objek, System.EventArgs e)
{
mencoba
{
JumpPage = (int)ViewState["JumpPages"];//Baca nilai halaman yang tersedia dari ViewState dan simpan ke variabel JumpPage
//Tentukan apakah nilai input pengguna melebihi nilai rentang halaman yang tersedia
if(Int32.Parse(gotoPage.Text) > JumpPage || Int32.Parse(gotoPage.Text) <= 0)
Response.Write("<script>alert('Rentang halaman di luar batas!');location.href='WebForm8.aspx'</script>");
kalau tidak
{
int InputPage = Int32.Parse(gotoPage.Text.ToString()) - 1;//Konversikan nilai input pengguna dan simpan dalam
variabel InputPage
tipe int
ViewState["PageIndex"] = InputPage;//Tulis nilai InputPage ke dalam ViewState["PageIndex"]
TDataBind();//Panggil fungsi pengikatan data TDataBind() untuk melakukan operasi pengikatan data lagi
}
}
//Menangkap pengecualian yang disebabkan oleh pengguna yang memasukkan tipe data yang salah
menangkap (Pengecualian exp)
{
Response.Write("<script>alert('"+exp.Message+"');location.href='WebForm8.aspx'</script>");
}
}
}
}
Mari kita coba. Apakah efisiensinya jauh lebih tinggi?
Jika ada yang salah, mohon koreksi saya.