Recentemente, ao usar o controle GridView do ASP.net 2.0, descobri que as funções de classificação e paginação implementadas pela Microsoft são muito simples. Por exemplo, a classificação aciona o PostBack da página inteira ao clicar no nome da coluna e, em seguida, classificar, mas existe. não há ninguém no cabeçalho da coluna. Exibir ícones em ordem crescente e decrescente confundirá o usuário final ao usá-los, pois ele não sabe se está em ordem crescente ou decrescente. Portanto, o primeiro problema a ser resolvido hoje é exibir os ícones. na coluna em ordem crescente e decrescente é. Por padrão, o GridView só pode classificar por uma coluna, ou seja, não pode ser classificado por várias colunas. Em aplicações práticas, a classificação por apenas uma coluna não pode atender aos negócios. necessidades. O terceiro problema é a paginação GridView. Exibição do número da página de paginação predefinida do GridView, relativamente simples, mas em aplicações reais, a paginação pode não ser tão simples quanto apenas exibir a página inicial, página anterior, próxima página, última página ou números de página numéricos. Deve ser mais necessário pular, o número da página atual, o número total de páginas, etc., informações mais detalhadas.
Primeiro: classificação de várias colunas do GridView e exibição do ícone de classificação.
Primeiro, podemos criar um novo programa de biblioteca de classes. Precisamos principalmente fazer referência ao arquivo System.Web.Dll e, em seguida, criar uma nova classe. só precisa reestruturar alguns métodos.
O exemplo da minha demonstração usa classificação de coluna única. Se a classificação de várias colunas estiver habilitada, defina AllowMultiColumnSorting do controle como True para obter a classificação de várias colunas.
1 classe pública WebGridView:GridView
2 {
3 atributos#atributos da região
4 /**////
5 /// Habilitar ou desabilitar a classificação de múltiplas colunas
6 ///
7 [
8 Descrição("Se ativar a função de classificação de múltiplas colunas"),
9 Categoria("Classificar"),
10 Valor Padrão("falso"),
11]
12 bool público AllowMultiColumnSorting
13 {
14 obter
15 {
16 objeto o = ViewState["EnableMultiColumnSorting"];
17 return (o!= null? (bool)o: false);
18}
19 conjuntos
20 {
21 PermitirClassificação = verdadeiro;
22 ViewState["EnableMultiColumnSorting"] = valor;
vinte e três }
vinte e quatro }
25 /**////
26 /// Exibir ícone em ordem crescente
27 ///
28 [
29 Descrição("Mostrar ícone ao classificar em ordem crescente"),
30 Categoria("Classificar"),
31 Editor("System.Web.UI.Design.UrlEditor", typeof(System.Drawing.Design.UITypeEditor)),
32 Valor Padrão(""),
33
34]
35 string pública SortAscImageUrl
36 {
37 obter
38 {
39 objeto o = ViewState["SortImageAsc"];
40 return (o != null ? o.ToString() : "");
41}
42 conjuntos
43 {
44 ViewState["SortImageAsc"] = valor;
45}
46}
47 /**////
48 /// Exibir ícones em ordem decrescente
49 ///
50 [
51 Description("Mostrar ícone em ordem decrescente"),
52 Categoria("Classificar"),
53 Editor("System.Web.UI.Design.UrlEditor", typeof(System.Drawing.Design.UITypeEditor)),
54 Valor Padrão(""),
55]
56 string pública SortDescImageUrl
57 {
58 obter
59 {
60 objeto o = ViewState["SortImageDesc"];
61 return (o != null ? o.ToString() : "");
62}
63 conjuntos
64 {
65 ViewState["SortImageDesc"] = valor;
66}
67}
68 #regiãofinal
69 Método de substituição#região Método de substituição
70 substituição protegida void OnSorting(GridViewSortEventArgs e)
71 {
72 se (AllowMultiColumnSorting)
73 {
74 e.SortExpression = GetSortExpression(e);
75}
76
77base.OnSorting(e);
78}
79 substituição protegida void OnRowCreated(GridViewRowEventArgs e)
80 {
81 se (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 #regiãofinal
92 método protegido #método protegido por região
93 /**////
94 /// Obtém expressão de classificação
95 ///
96 string protegida 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 mais
110 {
111 sortAttribute += String.Concat(",", e.SortExpression, "ASC ");
112}
113 return sortAttribute.TrimStart(",".ToCharArray()).TrimEnd(",".ToCharArray());
114
115}
116 /**////
117 /// Modifica a ordem de classificação
118 ///
119 string protegida ModifySortExpression(string[] sortColumns, string sortExpression)
120 {
121 string ascSortExpression = String.Concat(sortExpression, "ASC");
122 string descSortExpression = String.Concat(sortExpression, "DESC");
123
124 para (int i = 0; i < sortColumns.Length; i++)
125 {
126
127 if (ascSortExpression.Equals(sortColumns[i]))
128 {
129 sortColumns[i] = descSortExpression;
130}
131
132 senão 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 /**////
142 /// Obtém a expressão atual para classificar a coluna selecionada
143 ///
144 void protegido SearchSortExpression(string[] sortColumns, string sortColumn, out string sortOrder, out int sortOrderNo)
145 {
146 sortOrder = "";
147 sortOrderNo = -1;
148 para (int i = 0; i
150 if (sortColumns[i].StartsWith(sortColumn))
151 {
152 sortOrderNo = i + 1;
153 se (AllowMultiColumnSorting)
154 {
155 sortOrder = sortColumns[i].Substring(sortColumn.Length).Trim();
156}
157 mais
158 {
159 sortOrder = ((SortDirection == SortDirection.Ascendente) ? "ASC" : "DESC");
160}
161}
162}
163}
164 /**////
165 /// Faça desenhos em ordem crescente e decrescente
166 ///
167 void protegido DisplaySortOrderImages(string sortExpression, GridViewRow dgItem)
168 {
169 string[] sortColumns = sortExpression.Split(",".ToCharArray());
170
171 para (int i = 0; i
173 if (dgItem.Cells[i].Controls.Count > 0 && dgItem.Cells[i].Controls[0] é LinkButton)
174 {
175 string ordenação;
176 int sortOrderNo;
177 coluna de string = ((LinkButton)dgItem.Cells[i].Controls[0]).CommandArgument;
178 SearchSortExpression(sortColumns, coluna, out sortOrder, out sortOrderNo);
179 se (sortOrderNo > 0)
180 {
181 string sortImgLoc = (sortOrder.Equals("ASC") ? SortAscImageUrl : SortDescImageUrl);
182
183 if (sortImgLoc! = String.Empty)
184 {
185 Imagem imgSortDirection = new Imagem();
186 imgSortDirection.ImageUrl = sortImgLoc;
187 dgItem.Cells[i].Controls.Add(imgSortDirection);
188
189}
190 mais
191 {
192
193 se (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 #regiãofinal
207}
Segundo: Exibição de informações detalhadas de paginação Esta função não está encapsulada em um formulário de controle. Você pode operar diretamente a última página no evento GridView_DataBound.
A seguir está uma demonstração de classificação de várias colunas e código de exibição de paginação