Baru-baru ini ketika menggunakan kontrol GridView ASP.net 2.0, saya menemukan bahwa fungsi pengurutan dan paging yang diterapkan oleh Microsoft sangat sederhana, misalnya, pengurutan memicu PostBack seluruh halaman ketika mengklik nama kolom, dan kemudian mengurutkan, tetapi di sana Tidak ada seorang pun di header kolom. Menampilkan ikon dalam urutan menaik dan menurun akan membingungkan pengguna akhir saat menggunakannya karena mereka tidak tahu apakah itu dalam urutan menaik atau menurun pada kolom dalam urutan menaik dan menurun. Masalah kedua yang harus diselesaikan adalah Secara default, GridView hanya dapat mengurutkan berdasarkan satu kolom, artinya tidak dapat diurutkan berdasarkan beberapa kolom kebutuhan. Masalah ketiga adalah paging GridView. Tampilan nomor halaman paging GridView yang telah ditentukan sebelumnya, relatif sederhana, tetapi dalam aplikasi sebenarnya, paging mungkin tidak sesederhana hanya menampilkan halaman beranda, halaman sebelumnya, halaman berikutnya, halaman terakhir, atau nomor halaman numerik. . Seharusnya lebih penting untuk melompat, nomor halaman saat ini, jumlah halaman, dll., informasi lebih rinci.
Pertama: tampilan ikon penyortiran multi-kolom GridView dan penyortiran.
Pertama, kita dapat membuat program perpustakaan kelas baru. Kita terutama perlu mereferensikan file System.Web.Dll dan kemudian membuat kelas baru hanya perlu merestrukturisasi beberapa metode.
Contoh demonstrasi saya menggunakan pengurutan kolom tunggal. Jika pengurutan multi-kolom diaktifkan, atur kontrol AllowMultiColumnSorting ke True untuk mencapai pengurutan multi-kolom.
1 WebGridView kelas publik: GridView
2 {
3 atribut#atribut wilayah
4 /**//// <ringkasan>
5 /// Apakah akan mengaktifkan atau menonaktifkan pengurutan multi-kolom
6 /// </ringkasan>
7 [
8 Deskripsi("Apakah akan mengaktifkan fungsi penyortiran multi-kolom"),
9 Kategori("Urutkan"),
10Nilai Default("salah"),
11 ]
12 bool publik AllowMultiColumnSorting
13 {
14 dapatkan
15 {
16 objek o = ViewState["EnableMultiColumnSorting"];
17 kembali (o != null ? (bool)o : false);
18}
19 set
20 {
21 Izinkan Penyortiran = benar;
22 ViewState["EnableMultiColumnSorting"] = nilai;
dua puluh tiga }
dua puluh empat }
25 /**//// <ringkasan>
26 /// Menampilkan ikon dalam urutan menaik
27 /// </ringkasan>
28 [
29 Deskripsi("Tampilkan ikon saat mengurutkan menaik"),
30 Kategori("Urutkan"),
31 Editor("Sistem.Web.UI.Desain.UrlEditor", typeof(Sistem.Gambar.Desain.UITypeEditor)),
32Nilai Default(""),
33
34 ]
35 string publik SortAscImageUrl
36 {
37 dapatkan
38 {
39 objek o = ViewState["SortImageAsc"];
40 kembali (o != null ? o.ToString() : "");
41 }
42 set
43 {
44 ViewState["SortImageAsc"] = nilai;
45 }
46 }
47 /**//// <ringkasan>
48 /// Menampilkan ikon dalam urutan menurun
49 /// </ringkasan>
50 [
51 Deskripsi("Tampilkan ikon dalam urutan menurun"),
52 Kategori("Urutkan"),
53 Editor("Sistem.Web.UI.Desain.UrlEditor", typeof(Sistem.Gambar.Desain.UITypeEditor)),
54Nilai Default(""),
55 ]
56 string publik SortDescImageUrl
57 {
58 dapatkan
59 {
60 objek o = ViewState["SortImageDesc"];
61 kembali (o != null ? o.ToString() : "");
62 }
63 set
64 {
65 ViewState["SortImageDesc"] = nilai;
66 }
67 }
68 #wilayah akhir
69 Metode penggantian#region Metode penggantian
70 penggantian yang dilindungi void OnSorting(GridViewSortEventArgs e)
71 {
72 jika (Izinkan Penyortiran Multi Kolom)
73 {
74 e.SortExpression = GetSortExpression(e);
75 }
76
77 basis.OnSorting(e);
78 }
79 penggantian yang dilindungi batal OnRowCreated(GridViewRowEventArgs e)
80 {
81 jika (e.Row.RowType == DataControlRowType.Header)
82 {
83 if (SortExpression != String.Kosong)
84 {
85 DisplaySortOrderImages(SortExpression, e.Row);
86 this.CreateRow(0, 0, DataControlRowType.EmptyDataRow, DataControlRowState.Normal);
87 }
88}
89 base.OnRowCreated(e);
90}
91 #wilayah akhir
92 metode yang dilindungi #metode yang dilindungi wilayah
93 /**//// <ringkasan>
94 /// Dapatkan ekspresi pengurutan
95 /// </ringkasan>
96 string yang dilindungi GetSortExpression(GridViewSortEventArgs e)
97 {
98 string[] sortColumns = null;
99 string sortAttribute = SortExpression;
100
101 if (sortAttribute != String.Kosong)
102 {
103 sortColumns = sortAttribute.Split(",".ToCharArray());
104 }
105 if (sortAttribute.IndexOf(e.SortExpression) > 0 || sortAttribute.StartsWith(e.SortExpression))
106 {
107 sortAttribute = ModifySortExpression(sortColumns, e.SortExpression);
108 }
109 lainnya
110 {
111 sortAttribute += String.Concat(",", e.SortExpression, " ASC ");
112 }
113 kembalikan sortAttribute.TrimStart(",".ToCharArray()).TrimEnd(",".ToCharArray());
114
115 }
116 /**//// <ringkasan>
117 /// Memodifikasi urutan pengurutan
118 /// </ringkasan>
119 string yang dilindungi ModifySortExpression(string[] sortColumns, string sortExpression)
120 {
121 string ascSortExpression = String.Concat(sortExpression, " ASC ");
122 string descSortExpression = String.Concat(sortExpression, " DESC ");
123
124 untuk (int i = 0; i < sortColumns.Length; i++)
125 {
126
127 if (ascSortExpression.Equals(sortColumns[i]))
128 {
129 sortColumns[i] = descSortExpression;
130 }
131
132 lain jika (descSortExpression.Equals(sortColumns[i]))
133 {
134 Array.Clear(sortColumns, i, 1);
135 }
136 }
137
138 return String.Join(",", sortColumns).Replace(",,", ",").TrimStart(",".ToCharArray());
139
140 }
141 /**//// <ringkasan>
142 /// Dapatkan ekspresi saat ini untuk mengurutkan kolom yang dipilih
143 /// </ringkasan>
144 dilindungi void SearchSortExpression(string[] sortColumns, string sortColumn, out string sortOrder, out int sortOrderNo)
145 {
146 urutanurutan = "";
147 sortOrderNo = -1;
148 untuk (int i = 0; i < sortColumns.Length; i++)
149 {
150 if (sortColumns[i].StartsWith(sortColumn))
151 {
152 sortOrderNo = i + 1;
153 if (Izinkan Penyortiran Multi Kolom)
154 {
155 sortOrder = sortColumns[i].Substring(sortColumn.Length).Trim();
156 }
157 lainnya
158 {
159 sortOrder = ((SortDirection == SortDirection.Ascending) ? "ASC" : "DESC");
160 }
161 }
162 }
163 }
164 /**//// <ringkasan>
165 /// Menggambar gambar dalam urutan menaik dan menurun
166 /// </ringkasan>
167 DisplaySortOrderImages yang dilindungi (string sortExpression, GridViewRow dgItem)
168 {
169 string[] sortColumns = sortExpression.Split(",".ToCharArray());
170
171 untuk (int i = 0; i < dgItem.Cells.Count; i++)
172 {
173 if (dgItem.Cells[i].Controls.Count > 0 && dgItem.Cells[i].Controls[0] adalah LinkButton)
174 {
175 urutan string;
176 int sortOrderNo;
177 kolom string = ((LinkButton)dgItem.Cells[i].Controls[0]).CommandArgument;
178 SearchSortExpression(sortColumns, kolom, out sortOrder, out sortOrderNo);
179 jika (sortOrderNo > 0)
180 {
181 string sortImgLoc = (sortOrder.Equals("ASC") ? SortAscImageUrl : SortDescImageUrl);
182
183 if (sortImgLoc != String.Kosong)
184 {
185 Gambar imgSortDirection = Gambar baru();
186 imgSortDirection.ImageUrl = sortImgLoc;
187 dgItem.Sel[i].Kontrol.Tambahkan(imgSortDirection);
188
189 }
190 lainnya
191 {
192
193 if (Izinkan Penyortiran Multi Kolom)
194 {
195 Literal litSortSeq = Literal baru();
196 litSortSeq.Teks = sortOrderNo.ToString();
197 dgItem.Sel[i].Kontrol.Tambahkan(litSortSeq);
198
199 }
200 }
201 }
202 }
203 }
204
205 }
206 #wilayah akhir
207 }
Kedua: Tampilan informasi paging terperinci. Fungsi ini tidak dienkapsulasi ke dalam formulir kontrol. Anda dapat langsung mengoperasikan halaman terakhir di acara GridView_DataBound.
Berikut ini adalah demonstrasi pengurutan multi-kolom dan kode tampilan paging
<skrip runat="server">
void PageDropDownList_SelectedIndexChanged(Pengirim objek, EventArgs e)
{
GridViewRow pagerRow = PelangganGridView.BottomPagerRow;
DropDownList pageList = (DropDownList)pagerRow.Cells[0].FindControl("PageDropDownList");
CustomersGridView.PageIndex = pageList.SelectedIndex;
}
void CustomersGridView_DataBound(Pengirim objek, EventArgs e)
{
GridViewRow pagerRow = PelangganGridView.BottomPagerRow;
LinkButton linkBtnFirst = (LinkButton)pagerRow.Cells[0].FindControl("linkBtnFirst");
LinkButton linkBtnPrev = (LinkButton)pagerRow.Cells[0].FindControl("linkBtnPrev");
LinkButton linkBtnNext = (LinkButton)pagerRow.Cells[0].FindControl("linkBtnNext");
LinkButton linkBtnLast = (LinkButton)pagerRow.Cells[0].FindControl("linkBtnLast");
if (CustomersGridView.PageIndex == 0)
{
linkBtnFirst.Enabled = salah;
linkBtnPrev.Enabled = salah;
}
lain jika (CustomersGridView.PageIndex == CustomersGridView.PageCount-1)
{
linkBtnLast.Enabled = salah;
linkBtnNext.Enabled = salah;
}
lain jika (CustomersGridView.PageCount<=0)
{
linkBtnFirst.Enabled = salah;
linkBtnPrev.Enabled = salah;
linkBtnNext.Enabled = salah;
linkBtnLast.Enabled = salah;
}
DropDownList pageList = (DropDownList)pagerRow.Cells[0].FindControl("PageDropDownList");
Label pageLabel = (Label)pagerRow.Cells[0].FindControl("CurrentPageLabel");
if (pageList != null)
{
untuk (int i = 0; i < CustomersGridView.PageCount; i++)
{
int nomor halaman = i + 1;
Item ListItem = ListItem baru(pageNumber.ToString() + "/" + CustomersGridView.PageCount.ToString(), pageNumber.ToString());
jika (i == CustomersGridView.PageIndex)
{
item.Terpilih = benar;
}
pageList.Item.Tambahkan
(item)
;
jika (Label halaman!= null)
{
int halaman saat ini = CustomersGridView.PageIndex + 1;
pageLabel.Text = "Halaman saat ini: " + currentPage.ToString() +
" / " + CustomersGridView.PageCount.ToString();
}
}
</skrip>
<html>
<tubuh>
<form id="Form1" runat="server">
<h3>
Contoh Templat Pager GridView</h3>
<asp:WebGridView ID="CustomersGridView" DataSourceID="CustomersSqlDataSource" AutoGenerateColumns="benar"
AllowPaging="true" OnDataBound="CustomersGridView_DataBound" SortAscImageUrl="~imagesarrow-up.gif" SortDescImageUrl="~imagesarrow-down.gif" runat="server" AllowSorting="True" width="723px ">
<PagerStyle ForeColor="Biru" BackColor="Biru Muda" />
<Templat Pager>
<lebar tabel="100%">
<tr>
<td lebar="70%">
<asp:Label ID="MessageLabel" ForeColor="Biru" Text="Nomor halaman:" runat="server" />
<asp:DropDownList ID="PageDropDownList" AutoPostBack="benar" OnSelectedIndexChanged="PageDropDownList_SelectedIndexChanged"
runat="server" />
<asp:LinkButton CommandName="Page" CommandArgument="First" ID="linkBtnFirst" runat="server">Beranda</asp:LinkButton>
<asp:LinkButton CommandName="Page" CommandArgument="Prev" ID="linkBtnPrev" runat="server">Halaman sebelumnya</asp:LinkButton>
<asp:LinkButton CommandName="Page" CommandArgument="Berikutnya" ID="linkBtnNext" runat="server">Halaman berikutnya</asp:LinkButton>
<asp:LinkButton CommandName="Page" CommandArgument="Terakhir" ID="linkBtnLast" runat="server">Halaman terakhir</asp:LinkButton>
</td>
<td lebar="70%" align="kanan">
<asp:Label ID="CurrentPageLabel" ForeColor="Biru" runat="server" />
</td>
</tr>
</tabel>
</Templat Pager>
</asp:WebGridView>
<asp:SqlDataSource ID="CustomersSqlDataSource" SelectCommand="Pilih [ID Pelanggan], [Nama Perusahaan], [Alamat], [Kota], [Kode Pos], [Negara] Dari [Pelanggan]"
ConnectionString="<%$ ConnectionStrings:NorthWindConnectionString%>" runat="server">
</asp:SqlDataSource>
</form>
</tubuh>
</html>