ASP.NET网页编程之ASP.Net2.0 GridView 多列排序,显现排...
我见过java运行在手机上,包括很廉价的山寨手机,但是却暂时没发现.net在手机上有什么作为。wp7可能是个转机,但是按照《Java的跨平台就是一句谎言。那.net的跨平台也当之无愧是一句谎言。asp.net|分页|排序|显现比来在利用ASP.net2.0的GridView控件时,发明排序与分页功效Microsoft完成的都很复杂,好比排序,在点击列名的时分来触发整页的PostBack,然后排序,可是在列头上没有一个显现升序降序的图标,这会让终极用户利用时很利诱,由于不晓得是升序了仍是降序了,以是明天起首办理的第一成绩就是升序降序在列上显现图标,第二要办理的成绩是默许GridView按列排序只能排一列的,也就是不克不及举行多列排序,而在实践使用中仅仅依照一列来排序是不克不及满意营业需求的,第三是GridView分页成绩,GridView预界说的分页页码显现,对照复杂,而实践使用中,分页大概不是只显现首页,上一页,下一页,末页,大概是数字的页码那末复杂,应当更必要,跳转,以后的页码,总页数等,更细致的信息。第一:GridView多列排序与排序图标显现
起首我们能够新建一个类库程序,次要必要援用System.Web.Dll文件
然后新建一个类,这个类承继与GridView控件,我们只必要对部分办法举行从头便可。
我的演示的例子,接纳了单列排序,假如启用多列排序,把控件的AllowMultiColumnSorting设置为True就是
多列排序。
1publicclassWebGridView:GridView
2{
3属性#region属性
4/**////<summary>
5///是不是启用大概克制多列排序
6///</summary>
7[
8Description("是不是启用多列排序功效"),
9Category("排序"),
10DefaultValue("false"),
11]
12publicboolAllowMultiColumnSorting
13{
14get
15{
16objecto=ViewState["EnableMultiColumnSorting"];
17return(o!=null?(bool)o:false);
18}
19set
20{
21AllowSorting=true;
22ViewState["EnableMultiColumnSorting"]=value;
23}
24}
25/**////<summary>
26///升序时显现图标
27///</summary>
28[
29Description("升序时显现图标"),
30Category("排序"),
31Editor("System.Web.UI.Design.UrlEditor",typeof(System.Drawing.Design.UITypeEditor)),
32DefaultValue(""),
33
34]
35publicstringSortAscImageUrl
36{
37get
38{
39objecto=ViewState["SortImageAsc"];
40return(o!=null?o.ToString():"");
41}
42set
43{
44ViewState["SortImageAsc"]=value;
45}
46}
47/**////<summary>
48///降序时显现图标
49///</summary>
50[
51Description("降序时显现图标"),
52Category("排序"),
53Editor("System.Web.UI.Design.UrlEditor",typeof(System.Drawing.Design.UITypeEditor)),
54DefaultValue(""),
55]
56publicstringSortDescImageUrl
57{
58get
59{
60objecto=ViewState["SortImageDesc"];
61return(o!=null?o.ToString():"");
62}
63set
64{
65ViewState["SortImageDesc"]=value;
66}
67}
68#endregion
69重写办法#region重写办法
70protectedoverridevoidOnSorting(GridViewSortEventArgse)
71{
72if(AllowMultiColumnSorting)
73{
74e.SortExpression=GetSortExpression(e);
75}
76
77base.OnSorting(e);
78}
79protectedoverridevoidOnRowCreated(GridViewRowEventArgse)
80{
81if(e.Row.RowType==DataControlRowType.Header)
82{
83if(SortExpression!=String.Empty)
84{
85DisplaySortOrderImages(SortExpression,e.Row);
86this.CreateRow(0,0,DataControlRowType.EmptyDataRow,DataControlRowState.Normal);
87}
88}
89base.OnRowCreated(e);
90}
91#endregion
92受回护的办法#region受回护的办法
93/**////<summary>
94///猎取排序表达式
95///</summary>
96protectedstringGetSortExpression(GridViewSortEventArgse)
97{
98string[]sortColumns=null;
99stringsortAttribute=SortExpression;
100
101if(sortAttribute!=String.Empty)
102{
103sortColumns=sortAttribute.Split(",".ToCharArray());
104}
105if(sortAttribute.IndexOf(e.SortExpression)>0||sortAttribute.StartsWith(e.SortExpression))
106{
107sortAttribute=ModifySortExpression(sortColumns,e.SortExpression);
108}
109else
110{
111sortAttribute+=String.Concat(",",e.SortExpression,"ASC");
112}
113returnsortAttribute.TrimStart(",".ToCharArray()).TrimEnd(",".ToCharArray());
114
115}
116/**////<summary>
117///修正排序按次
118///</summary>
119protectedstringModifySortExpression(string[]sortColumns,stringsortExpression)
120{
121stringascSortExpression=String.Concat(sortExpression,"ASC");
122stringdescSortExpression=String.Concat(sortExpression,"DESC");
123
124for(inti=0;i<sortColumns.Length;i++)
125{
126
127if(ascSortExpression.Equals(sortColumns))
128{
129sortColumns=descSortExpression;
130}
131
132elseif(descSortExpression.Equals(sortColumns))
133{
134Array.Clear(sortColumns,i,1);
135}
136}
137
138returnString.Join(",",sortColumns).Replace(",,",",").TrimStart(",".ToCharArray());
139
140}
141/**////<summary>
142///猎取以后的表达式对所选列举行排序
143///</summary>
144protectedvoidSearchSortExpression(string[]sortColumns,stringsortColumn,outstringsortOrder,outintsortOrderNo)
145{
146sortOrder="";
147sortOrderNo=-1;
148for(inti=0;i<sortColumns.Length;i++)
149{
150if(sortColumns.StartsWith(sortColumn))
151{
152sortOrderNo=i+1;
153if(AllowMultiColumnSorting)
154{
155sortOrder=sortColumns.Substring(sortColumn.Length).Trim();
156}
157else
158{
159sortOrder=((SortDirection==SortDirection.Ascending)?"ASC":"DESC");
160}
161}
162}
163}
164/**////<summary>
165///绘制升序降序的图片
166///</summary>
167protectedvoidDisplaySortOrderImages(stringsortExpression,GridViewRowdgItem)
168{
169string[]sortColumns=sortExpression.Split(",".ToCharArray());
170
171for(inti=0;i<dgItem.Cells.Count;i++)
172{
173if(dgItem.Cells.Controls.Count>0&&dgItem.Cells.ControlsisLinkButton)
174{
175stringsortOrder;
176intsortOrderNo;
177stringcolumn=((LinkButton)dgItem.Cells.Controls).CommandArgument;
178SearchSortExpression(sortColumns,column,outsortOrder,outsortOrderNo);
179if(sortOrderNo>0)
180{
181stringsortImgLoc=(sortOrder.Equals("ASC")?SortAscImageUrl:SortDescImageUrl);
182
183if(sortImgLoc!=String.Empty)
184{
185ImageimgSortDirection=newImage();
186imgSortDirection.ImageUrl=sortImgLoc;
187dgItem.Cells.Controls.Add(imgSortDirection);
188
189}
190else
191{
192
193if(AllowMultiColumnSorting)
194{
195LiterallitSortSeq=newLiteral();
196litSortSeq.Text=sortOrderNo.ToString();
197dgItem.Cells.Controls.Add(litSortSeq);
198
199}
200}
201}
202}
203}
204
205}
206#endregion
207}
第二:细致的分页信息显现,此功效没有封装成控件情势,间接在GridView_DataBound事务中对尾页操纵便可。
上面是多列排序与分页显现代码的演示
<scriptrunat="server">
voidPageDropDownList_SelectedIndexChanged(Objectsender,EventArgse)
{
GridViewRowpagerRow=CustomersGridView.BottomPagerRow;
DropDownListpageList=(DropDownList)pagerRow.Cells.FindControl("PageDropDownList");
CustomersGridView.PageIndex=pageList.SelectedIndex;
}
voidCustomersGridView_DataBound(Objectsender,EventArgse)
{
GridViewRowpagerRow=CustomersGridView.BottomPagerRow;
LinkButtonlinkBtnFirst=(LinkButton)pagerRow.Cells.FindControl("linkBtnFirst");
LinkButtonlinkBtnPrev=(LinkButton)pagerRow.Cells.FindControl("linkBtnPrev");
LinkButtonlinkBtnNext=(LinkButton)pagerRow.Cells.FindControl("linkBtnNext");
LinkButtonlinkBtnLast=(LinkButton)pagerRow.Cells.FindControl("linkBtnLast");
if(CustomersGridView.PageIndex==0)
{
linkBtnFirst.Enabled=false;
linkBtnPrev.Enabled=false;
}
elseif(CustomersGridView.PageIndex==CustomersGridView.PageCount-1)
{
linkBtnLast.Enabled=false;
linkBtnNext.Enabled=false;
}
elseif(CustomersGridView.PageCount<=0)
{
linkBtnFirst.Enabled=false;
linkBtnPrev.Enabled=false;
linkBtnNext.Enabled=false;
linkBtnLast.Enabled=false;
}
DropDownListpageList=(DropDownList)pagerRow.Cells.FindControl("PageDropDownList");
LabelpageLabel=(Label)pagerRow.Cells.FindControl("CurrentPageLabel");
if(pageList!=null)
{
for(inti=0;i<CustomersGridView.PageCount;i++)
{
intpageNumber=i+1;
ListItemitem=newListItem(pageNumber.ToString()+"/"+CustomersGridView.PageCount.ToString(),pageNumber.ToString());
if(i==CustomersGridView.PageIndex)
{
item.Selected=true;
}
pageList.Items.Add(item);
}
}
if(pageLabel!=null)
{
intcurrentPage=CustomersGridView.PageIndex+1;
pageLabel.Text="以后页:"+currentPage.ToString()+
"/"+CustomersGridView.PageCount.ToString();
}
}
</script>
<html>
<body>
<formid="Form1"runat="server">
<h3>
GridViewPagerTemplateExample</h3>
<asp:WebGridViewID="CustomersGridView"DataSourceID="CustomersSqlDataSource"AutoGenerateColumns="true"
AllowPaging="true"OnDataBound="CustomersGridView_DataBound"SortAscImageUrl="~imagesarrow-up.gif"SortDescImageUrl="~imagesarrow-down.gif"runat="server"AllowSorting="True"Width="723px">
<PagerStyleForeColor="Blue"BackColor="LightBlue"/>
<PagerTemplate>
<tablewidth="100%">
<tr>
<tdwidth="70%">
<asp:LabelID="MessageLabel"ForeColor="Blue"Text="页码:"runat="server"/>
<asp:DropDownListID="PageDropDownList"AutoPostBack="true"OnSelectedIndexChanged="PageDropDownList_SelectedIndexChanged"
runat="server"/>
<asp:LinkButtonCommandName="Page"CommandArgument="First"ID="linkBtnFirst"runat="server">首页</asp:LinkButton>
<asp:LinkButtonCommandName="Page"CommandArgument="Prev"ID="linkBtnPrev"runat="server">上一页</asp:LinkButton>
<asp:LinkButtonCommandName="Page"CommandArgument="Next"ID="linkBtnNext"runat="server">下一页</asp:LinkButton>
<asp:LinkButtonCommandName="Page"CommandArgument="Last"ID="linkBtnLast"runat="server">末页</asp:LinkButton>
</td>
<tdwidth="70%"align="right">
<asp:LabelID="CurrentPageLabel"ForeColor="Blue"runat="server"/>
</td>
</tr>
</table>
</PagerTemplate>
</asp:WebGridView>
<asp:SqlDataSourceID="CustomersSqlDataSource"SelectCommand="Select,,,,,From"
ConnectionString="<%$ConnectionStrings:NorthWindConnectionString%>"runat="server">
</asp:SqlDataSource>
</form>
</body>
</html>
有个问题想请教你一下,呵呵:)你觉得将来学什么方向比较好,我真是想不出来,知道的太少了,麻烦了。 逐步缩小出错代码段的范围,最终确定错误代码的位置。 能产生和执行动态、交互式、高效率的站占服务器的应用程序。运用ASP可将VBscript、javascript等脚本语言嵌入到HTML中,便可快速完成网站的应用程序,无需编译,可在服务器端直接执行。容易编写。 碰到复杂点的问题都不知道能不能解决,现在有点实力的公司都选择自已在开源的基础上做开发。但没听说过有人在IIS上做改进的,windows、sqlserver集群方面的应用也很少见。 那么,ASP.Net有哪些改进呢? 但是java靠开源打出的一片天地,特别是在微软的垄断下能打开今天的局面还是有它的生命力的。 主流网站开发语言之ASP:ASP是微软(Microsoft)所开发的一种后台脚本语言,它的语法和VisualBASIC类似,可以像SSI(ServerSideInclude)那样把后台脚本代码内嵌到HTML页面中。虽然ASP简单易用,但是它自身存在着许多缺陷,最重要的就是安全性问题。 Asp.net:首先来说,Asp.net和Asp没什么关系,看着像是升级版本什么的,其实没什么联系。Asp是脚本编程,用的是ASP语言,而ASP.net用的是C#语言,完全不同的东西。 平台无关性是PHP的最大优点,但是在优点的背后,还是有一些小小的缺点的。如果在PHP中不使用ODBC,而用其自带的数据库函数(这样的效率要比使用ODBC高)来连接数据库的话,使用不同的数据库,PHP的函数名不能统一。这样,使得程序的移植变得有些麻烦。不过,作为目前应用最为广泛的一种后台语言,PHP的优点还是异常明显的。
页:
[1]