في الآونة الأخيرة، عند استخدام عنصر تحكم GridView لـ ASP.net 2.0، وجدت أن وظائف الفرز والترحيل التي تنفذها Microsoft بسيطة جدًا، على سبيل المثال، يؤدي الفرز إلى تشغيل PostBack للصفحة بأكملها عند النقر فوق اسم العمود، ثم الفرز، ولكن هناك لا يوجد أحد في رأس العمود. سيؤدي عرض الرموز بترتيب تصاعدي وتنازلي إلى إرباك المستخدم النهائي عند استخدامها لأنه لا يعرف ما إذا كان ترتيبها تصاعديًا أم تنازليًا، لذا فإن المشكلة الأولى التي يجب حلها اليوم هي عرض الرموز المشكلة الثانية التي يجب حلها في العمود هي أن GridView افتراضيًا يمكنه الفرز حسب عمود واحد فقط، أي أنه لا يمكن فرزه بواسطة أعمدة متعددة في التطبيقات العملية، لا يمكن الفرز حسب عمود واحد فقط المشكلة الثالثة هي عرض رقم صفحة الترحيل بواسطة GridView، وهو أمر بسيط نسبيًا، ولكن في التطبيقات الفعلية، قد لا يكون الترحيل بسيطًا مثل مجرد عرض الصفحة الرئيسية أو الصفحة السابقة أو الصفحة التالية أو الصفحة الأخيرة أو أرقام الصفحات الرقمية. يجب أن يكون من الضروري القفز، ورقم الصفحة الحالية، والعدد الإجمالي للصفحات، وما إلى ذلك، معلومات أكثر تفصيلا.
أولاً: عرض أيقونة الفرز والفرز متعدد الأعمدة في GridView،
أولاً، يمكننا إنشاء برنامج مكتبة فئة جديد، نحتاج بشكل أساسي إلى الرجوع إلى ملف System.Web.Dll ثم إنشاء فئة جديدة تحتاج فقط إلى إعادة هيكلة بعض الأساليب.
يستخدم مثال العرض التوضيحي الخاص بي الفرز بعمود واحد. إذا تم تمكين الفرز متعدد الأعمدة، فقم بتعيين السماح متعدد الأعمدة لعنصر التحكم إلى True لتحقيق الفرز متعدد الأعمدة.
1 فئة عامة WebGridView:GridView
2 {
3 سمات # سمات المنطقة
4 /**//// <الملخص>
5 /// ما إذا كان سيتم تمكين أو تعطيل الفرز متعدد الأعمدة
6 /// </summary>
7 [
8 وصف("ما إذا كان سيتم تمكين وظيفة الفرز متعدد الأعمدة"),
9 فئة ("فرز")،
10 القيمة الافتراضية("خطأ"),
11 ]
12 منطقي عام يسمح بفرز الأعمدة المتعددة
13 {
14 الحصول على
15 {
16 object o = ViewState["EnableMultiColumnSorting"];
17 return (o != null ? (bool)o : false);
18}
19 مجموعة
20 {
21 السماح بالفرز = صحيح؛
22 ViewState["EnableMultiColumnSorting"] = value;
ثلاثة وعشرين }
أربعة وعشرون }
25 /**//// <الملخص>
26 /// عرض الأيقونة بترتيب تصاعدي
27 /// </summary>
28 [
29 الوصف("إظهار الرمز عند الفرز التصاعدي"),
30 فئة ("فرز")،
31 محرر ("System.Web.UI.Design.UrlEditor"، typeof(System.Drawing.Design.UITypeEditor))،
32 القيمة الافتراضية(""),
33
34 ]
35 سلسلة عامة SortAscImageUrl
36 {
37 الحصول على
38 {
39 object o = ViewState["SortImageAsc"];
40 return (o != null ? o.ToString() : "");
41 }
42 مجموعة
43 {
44 ViewState["SortImageAsc"] = value;
45 }
46 }
47 /**//// <الملخص>
48 /// عرض الأيقونات بترتيب تنازلي
49 /// </summary>
50 [
51 الوصف("إظهار الرمز بترتيب تنازلي"),
52 فئة ("فرز")،
53 محرر ("System.Web.UI.Design.UrlEditor"، typeof(System.Drawing.Design.UITypeEditor))،
54 القيمة الافتراضية(""),
55 ]
56 سلسلة عامة SortDescImageUrl
57 {
58 الحصول على
59 {
60 object o = ViewState["SortImageDesc"];
61 return (o != null ? o.ToString() : "");
62 }
63 مجموعة
64 {
65 ViewState["SortImageDesc"] = value;
66 }
67 }
68 #المنطقة
69 طريقة التجاوز # طريقة التجاوز المنطقة
70 تجاوز محمي باطل OnSorting(GridViewSortEventArgs e)
71 {
72 إذا (السماح بفرز الأعمدة)
73 {
74 e.SortExpression = GetSortExpression(e);
75 }
76
77 قاعدة.OnSorting(e);
78 }
79 تجاوز محمي باطل OnRowCreated(GridViewRowEventArgs e)
80 {
81 إذا (e.Row.RowType == DataControlRowType.Header)
82 {
83 إذا (SortExpression != String.Empty)
84 {
85 DisplaySortOrderImages(SortExpression, e.Row);
86 this.CreateRow(0, 0, DataControlRowType.EmptyDataRow, DataControlRowState.Normal);
87 }
88}
89 قاعدة.OnRowCreated(e);
90}
91 #المنطقة
92 طريقة محمية #طريقة محمية بالمنطقة
93 /**//// <الملخص>
94 /// احصل على تعبير الفرز
95 /// </summary>
96 سلسلة محمية GetSortExpression(GridViewSortEventArgs e)
97 {
98 سلسلة []sortColumns = null;
99 سلسلةsortAttribute = SortExpression;
100
101 إذا (sortAttribute != String.Empty)
102 {
103sortColumns =sortAttribute.Split(".ToCharArray());
104 }
105 إذا (sortAttribute.IndexOf(e.SortExpression) > 0 ||sortAttribute.StartsWith(e.SortExpression))
106 {
107sortAttribute = ModifySortExpression(sortColumns, e.SortExpression);
108 }
109 آخر
110 {
111sortAttribute += String.Concat("،, e.SortExpression, " ASC ");
112 }
113 returnsortAttribute.TrimStart(".ToCharArray()).TrimEnd(".ToCharArray());
114
115 }
116 /**//// <الملخص>
117 /// تعديل ترتيب الفرز
118 /// </summary>
119 سلسلة محمية ModifySortExpression(string[]sortColumns,stringsortExpression)
120 {
121 سلسلة ascSortExpression = String.Concat(sortExpression, "ASC");
122 سلسلة descSortExpression = String.Concat(sortExpression, " DESC ");
123
124 لـ (int i = 0; i <sortColumns.Length; i++)
125 {
126
127 إذا (ascSortExpression.Equals(sortColumns[i]))
128 {
129sortColumns[i] = descSortExpression;
130 }
131
132 آخر إذا (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 /**//// <الملخص>
142 /// احصل على التعبير الحالي لفرز العمود المحدد
143 /// </summary>
144 SearchSortExpression باطل محمي (سلسلة []sortColumns، سلسلةsortColumn، خارج ترتيب السلسلة، خارج intsortOrderNo)
145 {
146 ترتيب الترتيب = "";
147 رقم الترتيب = -1;
148 لـ (int i = 0; i <sortColumns.Length; i++)
149 {
150 إذا (sortColumns[i].StartsWith(sortColumn))
151 {
152 رقم الترتيب = i + 1;
153 إذا (السماح بفرز الأعمدة)
154 {
155sortOrder =sortColumns[i].Substring(sortColumn.Length).Trim();
156 }
157 آخر
158 {
159 SortOrder = ((SortDirection == SortDirection.Ascending) ? "ASC" : "DESC");
160 }
161 }
162 }
163 }
164 /**//// <الملخص>
165 /// رسم الصور بترتيب تصاعدي وتنازلي
166 /// </summary>
167 DisplaySortOrderImages محمية باطلة (سلسلةsortExpression، GridViewRow dgItem)
168 {
169 سلسلة []sortColumns =sortExpression.Split("،.ToCharArray());
170
171 لـ (int i = 0; i < dgItem.Cells.Count; i++)
172 {
173 إذا (dgItem.Cells[i].Controls.Count > 0 && dgItem.Cells[i].Controls[0] هو زر الارتباط)
174 {
175 سلسلة فرز؛
176 عدد صحيح ترتيب رقم؛
177 عمود السلسلة = ((LinkButton)dgItem.Cells[i].Controls[0]).CommandArgument;
178 SearchSortExpression(sortColumns, column, outsortOrder,outsortOrderNo);
179 إذا (رقم الترتيب > 0)
180 {
181 سلسلةsortImgLoc = (sortOrder.Equals("ASC") ? SortAscImageUrl : SortDescImageUrl);
182
183 إذا (sortImgLoc!= String.Empty)
184 {
185 الصورة imgSortDirection = new Image();
186 imgSortDirection.ImageUrl =sortImgLoc;
187 dgItem.Cells[i].Controls.Add(imgSortDirection);
188
189 }
190 أخرى
191 {
192
193 إذا (السماح بفرز الأعمدة)
194 {
195 حرفي litSortSeq = new Literal();
196 litSortSeq.Text =sortOrderNo.ToString();
197 dgItem.Cells[i].Controls.Add(litSortSeq);
198
199 }
200 }
201 }
202 }
203 }
204
205 }
206 #المنطقة
207 }
ثانيًا: عرض معلومات الترحيل التفصيلية لم يتم تغليفها في نموذج تحكم، يمكنك تشغيل الصفحة الأخيرة مباشرة في حدث GridView_DataBound.
فيما يلي عرض توضيحي لكود عرض الفرز والترحيل متعدد الأعمدة
<script runat="server">
باطلة PageDropDownList_SelectedIndexChanged (مرسل الكائن، EventArgs e)
{
GridViewRow pagerRow = CustomersGridView.BottomPagerRow;
DropDownList pageList = (DropDownList)pagerRow.Cells[0].FindControl("PageDropDownList");
CustomersGridView.PageIndex = pageList.SelectedIndex;
}
باطلة CustomersGridView_DataBound(مرسل الكائن، 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")
;
{
linkBtnFirst.Enabled = false;
linkBtnPrev.Enabled = false;
}
وإلا إذا (CustomersGridView.PageIndex == CustomersGridView.PageCount-1)
{
linkBtnLast.Enabled = false;
linkBtnNext.Enabled = false;
}
وإلا إذا (CustomersGridView.PageCount<=0)
{
linkBtnFirst.Enabled = false;
linkBtnPrev.Enabled = false;
linkBtnNext.Enabled = false;
linkBtnLast.Enabled = false;
}
DropDownList pageList = (DropDownList)pagerRow.Cells[0].FindControl("PageDropDownList");
تسمية pageLabel = (Label)pagerRow.Cells[0].FindControl("CurrentPageLabel")
;
{
لـ (int i = 0; i < CustomersGridView.PageCount; i++)
{
رقم الصفحة int = i + 1;
ListItem item = new ListItem(pageNumber.ToString() + "/" + CustomersGridView.PageCount.ToString(), pageNumber.ToString());
إذا (i == CustomersGridView.PageIndex)
{
item.Selected = true;
}
pageList.Items.Add(item
)
;
إذا (pageLabel != فارغة)
{
int currentPage = CustomersGridView.PageIndex + 1;
pageLabel.Text = "الصفحة الحالية: " + currentPage.ToString() +
" / " + CustomersGridView.PageCount.ToString();
}
}
</script>
<html>
<الجسم>
<form id="Form1" runat="server">
<ح3>
مثال على GridView PagerTemplate</h3>
<asp:WebGridView ID = "CustomersGridView" DataSourceID = "CustomersSqlDataSource" AutoGenerateColumns = "صحيح"
السماح بالترحيل = "صحيح" OnDataBound = "CustomersGridView_DataBound" SortAscImageUrl = "~imagesarrow-up.gif" SortDescImageUrl = "~imagesarrow-down.gif" runat = "الخادم" السماح بالفرز = "True" العرض = "723px ">
<PagerStyle ForeColor="Blue" BackColor="LightBlue" />
<بيجر تيمبلات>
<عرض الجدول = "100%">
<تر>
<عرض العرض = "70%">
<asp:Label ID = "MessageLabel" ForeColor = "أزرق" Text = "رقم الصفحة:" runat = "الخادم" />
<asp:DropDownList ID = "PageDropDownList" AutoPostBack = "صحيح" OnSelectedIndexChanged = "PageDropDownList_SelectedIndexChanged"
تشغيل = "الخادم" />
<asp:LinkButton CommandName = "Page" CommandArgument = "First" ID = "linkBtnFirst" runat = "server"> الصفحة الرئيسية </asp: LinkButton>
<asp:LinkButton CommandName = "Page" CommandArgument = "Prev" ID = "linkBtnPrev" runat = "server"> الصفحة السابقة </asp: LinkButton>
<asp:LinkButton CommandName = "Page" CommandArgument = "التالي" ID = "linkBtnNext" runat = "server"> الصفحة التالية </asp: LinkButton>
<asp:LinkButton CommandName = "Page" CommandArgument = "Last" ID = "linkBtnLast" runat = "server"> الصفحة الأخيرة </asp: LinkButton>
</TD>
<td width="70%" align="right">
<asp:معرف التسمية = "CurrentPageLabel" ForeColor = "أزرق" runat = "الخادم" />
</TD>
</tr>
</الجدول>
</PagerTemplate>
</asp:WebGridView>
<asp:SqlDataSource ID="CustomersSqlDataSource" SelectCommand="حدد [معرف العميل]، [اسم الشركة]، [العنوان]، [المدينة]، [الرمز البريدي]، [البلد] من [العملاء]"
ConnectionString="<%$ ConnectionStrings:NorthWindConnectionString%>" runat="server">
</asp:SqlDataSource>
</form>
</الجسم>
</html>