Kürzlich habe ich bei der Verwendung des GridView-Steuerelements von ASP.net 2.0 festgestellt, dass die von Microsoft implementierten Sortier- und Paging-Funktionen sehr einfach sind. Wenn Sie beispielsweise auf den Spaltennamen klicken, wird beim Sortieren das PostBack der gesamten Seite und dann das Sortieren ausgelöst Die Anzeige von Symbolen in aufsteigender und absteigender Reihenfolge wird den Endbenutzer bei der Verwendung verwirren, da er nicht weiß, ob es sich um eine aufsteigende oder absteigende Reihenfolge handelt. Das erste Problem, das heute gelöst werden muss, ist die Anzeige der Symbole Das zweite zu lösende Problem ist: Standardmäßig kann GridView nur nach einer Spalte sortieren, das heißt, es kann nicht nach mehreren Spalten sortiert werden Das dritte Problem ist die vordefinierte Paging-Seitennummer von GridView. In tatsächlichen Anwendungen ist das Paging jedoch möglicherweise nicht so einfach wie die Anzeige der Startseite, der vorherigen Seite, der letzten Seite oder der numerischen Seitenzahlen . Es sollte mehr nötig sein, um zu springen, die aktuelle Seitenzahl, die Gesamtzahl der Seiten usw., detailliertere Informationen.
Erstens: Sortieren und Sortieren von Symbolen in GridView.
Zuerst müssen wir ein neues Klassenbibliotheksprogramm erstellen und dann eine neue Klasse erstellen Es müssen nur einige Methoden umstrukturiert werden.
Das Beispiel meiner Demonstration verwendet die Sortierung nach mehreren Spalten. Wenn die Sortierung nach mehreren Spalten aktiviert ist, setzen Sie „AllowMultiColumnSorting“ des Steuerelements auf „True“, um eine Sortierung nach mehreren Spalten zu erreichen.
1 öffentliche Klasse WebGridView:GridView
2 {
3 Attribute#Regionsattribute
4 /**//// <Zusammenfassung>
5 /// Ob die mehrspaltige Sortierung aktiviert oder deaktiviert werden soll
6 /// </summary>
7 [
8 Beschreibung("Ob die mehrspaltige Sortierfunktion aktiviert werden soll"),
9 Kategorie("Sortieren"),
10 DefaultValue("false"),
11]
12 public bool AllowMultiColumnSorting
13 {
14 erhalten
15 {
16 object o = ViewState["EnableMultiColumnSorting"];
17 return (o != null ? (bool)o : false);
18}
19 Sätze
20 {
21 AllowSorting = true;
22 ViewState["EnableMultiColumnSorting"] = value;
dreiundzwanzig }
vierundzwanzig }
25 /**//// <Zusammenfassung>
26 /// Symbol in aufsteigender Reihenfolge anzeigen
27 /// </summary>
28 [
29 Beschreibung("Symbol bei aufsteigender Sortierung anzeigen"),
30 Kategorie("Sortieren"),
31 Editor("System.Web.UI.Design.UrlEditor", typeof(System.Drawing.Design.UITypeEditor)),
32 Standardwert(""),
33
34 ]
35 öffentliche Zeichenfolge SortAscImageUrl
36 {
37 bekommen
38 {
39 object o = ViewState["SortImageAsc"];
40 return (o != null ? o.ToString() : "");
41 }
42 eingestellt
43 {
44 ViewState["SortImageAsc"] = value;
45 }
46 }
47 /**//// <Zusammenfassung>
48 /// Symbole in absteigender Reihenfolge anzeigen
49 /// </summary>
50 [
51 Beschreibung("Symbol in absteigender Reihenfolge anzeigen"),
52 Kategorie("Sortieren"),
53 Editor("System.Web.UI.Design.UrlEditor", typeof(System.Drawing.Design.UITypeEditor)),
54 Standardwert(""),
55 ]
56 öffentliche Zeichenfolge SortDescImageUrl
57 {
58 erhalten
59 {
60 object o = ViewState["SortImageDesc"];
61 return (o != null ? o.ToString() : "");
62 }
63 Sätze
64 {
65 ViewState["SortImageDesc"] = value;
66 }
67 }
68 #endregion
69 Überschreibende Methode#region Überschreibende Methode
70 protected override void OnSorting(GridViewSortEventArgs e)
71 {
72 if (AllowMultiColumnSorting)
73 {
74 e.SortExpression = GetSortExpression(e);
75 }
76
77 base.OnSorting(e);
78 }
79 protected override void OnRowCreated(GridViewRowEventArgs e)
80 {
81 if (e.Row.RowType == DataControlRowType.Header)
82 {
83 if (SortExpression != String.Empty)
84 {
85 DisplaySortOrderImages(SortExpression, e.Row);
86 this.CreateRow(0, 0, DataControlRowType.EmptyDataRow, DataControlRowState.Normal);
87 }
88}
89 base.OnRowCreated(e);
90}
91 #endregion
92 geschützte Methode #region geschützte Methode
93 /**//// <Zusammenfassung>
94 /// Sortierausdruck abrufen
95 /// </summary>
96 protected string GetSortExpression(GridViewSortEventArgs e)
97 {
98 string[] sortColumns = null;
99 string sortAttribute = SortExpression;
100
101 if (sortAttribute != String.Empty)
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 sonst
110 {
111 sortAttribute += String.Concat(",", e.SortExpression, " ASC ");
112 }
113 return sortAttribute.TrimStart(",".ToCharArray()).TrimEnd(",".ToCharArray());
114
115 }
116 /**//// <Zusammenfassung>
117 /// Sortierreihenfolge ändern
118 /// </summary>
119 protected string ModifySortExpression(string[] sortColumns, string sortExpression)
120 {
121 string ascSortExpression = String.Concat(sortExpression, " ASC ");
122 string descSortExpression = String.Concat(sortExpression, " DESC ");
123
124 for (int i = 0; i < sortColumns.Length; i++)
125 {
126
127 if (ascSortExpression.Equals(sortColumns[i]))
128 {
129 sortColumns[i] = descSortExpression;
130 }
131
132 else if (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 /**//// <Zusammenfassung>
142 /// Den aktuellen Ausdruck abrufen, um die ausgewählte Spalte zu sortieren
143 /// </summary>
144 protected void SearchSortExpression(string[] sortColumns, string sortColumn, out string sortOrder, out int sortOrderNo)
145 {
146 sortOrder = "";
147 sortOrderNo = -1;
148 for (int i = 0; i < sortColumns.Length; i++)
149 {
150 if (sortColumns[i].StartsWith(sortColumn))
151 {
152 sortOrderNo = i + 1;
153 if (AllowMultiColumnSorting)
154 {
155 sortOrder = sortColumns[i].Substring(sortColumn.Length).Trim();
156 }
157 sonst
158 {
159 sortOrder = ((SortDirection == SortDirection.Ascending) ? "ASC" : "DESC");
160 }
161 }
162 }
163 }
164 /**//// <Zusammenfassung>
165 /// Zeichnen Sie Bilder in aufsteigender und absteigender Reihenfolge
166 /// </summary>
167 protected void DisplaySortOrderImages(string sortExpression, GridViewRow dgItem)
168 {
169 string[] sortColumns = sortExpression.Split(",".ToCharArray());
170
171 for (int i = 0; i < dgItem.Cells.Count; i++)
172 {
173 if (dgItem.Cells[i].Controls.Count > 0 && dgItem.Cells[i].Controls[0] ist LinkButton)
174 {
175 string sortOrder;
176 int sortOrderNo;
177 string columns = ((LinkButton)dgItem.Cells[i].Controls[0]).CommandArgument;
178 SearchSortExpression(sortColumns, Column, out sortOrder, out sortOrderNo);
179 if (sortOrderNo > 0)
180 {
181 string sortImgLoc = (sortOrder.Equals("ASC") ? SortAscImageUrl : SortDescImageUrl);
182
183 if (sortImgLoc != String.Empty)
184 {
185 Bild imgSortDirection = new Image();
186 imgSortDirection.ImageUrl = sortImgLoc;
187 dgItem.Cells[i].Controls.Add(imgSortDirection);
188
189 }
190 sonst
191 {
192
193 if (AllowMultiColumnSorting)
194 {
195 Literal litSortSeq = new Literal();
196 litSortSeq.Text = sortOrderNo.ToString();
197 dgItem.Cells[i].Controls.Add(litSortSeq);
198
199 }
200 }
201 }
202 }
203 }
204
205 }
206 #endregion
207 }
Zweitens: Detaillierte Anzeige der Seiteninformationen. Diese Funktion ist nicht in ein Steuerformular gekapselt. Sie können die letzte Seite direkt im GridView_DataBound-Ereignis bedienen.
Das Folgende ist eine Demonstration des mehrspaltigen Sortier- und Paging-Anzeigecodes
<script runat="server">
void PageDropDownList_SelectedIndexChanged(Object sender, EventArgs e)
{
GridViewRow pagerRow = CustomersGridView.BottomPagerRow;
DropDownList pageList = (DropDownList)pagerRow.Cells[0].FindControl("PageDropDownList");
CustomersGridView.PageIndex = pageList.SelectedIndex;
}
void CustomersGridView_DataBound(Object sender, EventArgs e)
{
GridViewRow pagerRow = CustomersGridView.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 = false;
linkBtnPrev.Enabled = false;
}
sonst wenn (CustomersGridView.PageIndex == CustomersGridView.PageCount-1)
{
linkBtnLast.Enabled = false;
linkBtnNext.Enabled = false;
}
sonst wenn (CustomersGridView.PageCount<=0)
{
linkBtnFirst.Enabled = false;
linkBtnPrev.Enabled = false;
linkBtnNext.Enabled = false;
linkBtnLast.Enabled = false;
}
DropDownList pageList = (DropDownList)pagerRow.Cells[0].FindControl("PageDropDownList");
Label pageLabel = (Label)pagerRow.Cells[0].FindControl("CurrentPageLabel");
if (pageList != null)
{
for (int i = 0; i < CustomersGridView.PageCount; i++)
{
int Seitennummer = i + 1;
ListItem item = new ListItem(pageNumber.ToString() + "/" + CustomersGridView.PageCount.ToString(), pageNumber.ToString());
if (i == CustomersGridView.PageIndex)
{
item.Selected = true;
}
pageList.Items.Add(item
)
;
if (pageLabel != null)
{
int currentPage = CustomersGridView.PageIndex + 1;
pageLabel.Text = "Aktuelle Seite: " + currentPage.ToString() +
" / " + CustomersGridView.PageCount.ToString();
}
}
</script>
<html>
<Körper>
<form id="Form1" runat="server">
<h3>
GridView PagerTemplate-Beispiel</h3>
<asp:WebGridView ID="CustomersGridView" DataSourceID="CustomersSqlDataSource" AutoGenerateColumns="true"
AllowPaging="true" OnDataBound="CustomersGridView_DataBound" SortAscImageUrl="~imagesarrow-up.gif" SortDescImageUrl="~imagesarrow-down.gif" runat="server" AllowSorting="True" width="723px ">
<PagerStyle ForeColor="Blue" BackColor="LightBlue" />
<PagerTemplate>
<table width="100%">
<tr>
<td width="70%">
<asp:Label ID="MessageLabel" ForeColor="Blue" Text="Seitennummer:" runat="server" />
<asp:DropDownList ID="PageDropDownList" AutoPostBack="true" OnSelectedIndexChanged="PageDropDownList_SelectedIndexChanged"
runat="server" />
<asp:LinkButton CommandName="Page" CommandArgument="First" ID="linkBtnFirst" runat="server">Home</asp:LinkButton>
<asp:LinkButton CommandName="Page" CommandArgument="Prev" ID="linkBtnPrev" runat="server">Vorherige Seite</asp:LinkButton>
<asp:LinkButton CommandName="Page" CommandArgument="Next" ID="linkBtnNext" runat="server">Nächste Seite</asp:LinkButton>
<asp:LinkButton CommandName="Seite" CommandArgument="Last" ID="linkBtnLast" runat="server">Letzte Seite</asp:LinkButton>
</td>
<td width="70%" align="right">
<asp:Label ID="CurrentPageLabel" ForeColor="Blue" runat="server" />
</td>
</tr>
</table>
</PagerTemplate>
</asp:WebGridView>
<asp:SqlDataSource ID="CustomersSqlDataSource" SelectCommand="Wählen Sie [Kunden-ID], [Firmenname], [Adresse], [Stadt], [Postleitzahl], [Land] von [Kunden] aus"
ConnectionString="<%$ ConnectionStrings:NorthWindConnectionString%>" runat="server">
</asp:SqlDataSource>
</form>
</body>
</html>