2008.11.15 / 标签:
asp.net ajax控件 / 分类:
ASP.NET
这次开发的CRM中有许多地方都使用到了ASP.NET中的GridView控件,这个控件的功能其实都是很全的,但是此次开发中不允许使用控件自带的分页,而是要求开发人员自己写。由于自己写的分页代码比较多,且项目中使用的GridView控件也是很多,为了偷懒+减少代码量…于是昨天晚上花了点时间做了这么个自定义WEB用户控件,写的时候也遇到了些问题,不过随着逐步的分析都逐一解决了,以下是该控件的源码。
using System;using System.Data;using System.Configuration;using System.Collections;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlControls;using System.Collections.Generic;/** * 功能:对GridView数据分页 * 作者:Neeke * 版权所有:尼克技术博客 http://www.ineeke.com * */public partial class WebUserControl : System.Web.UI.UserControl{ PagedDataSource pds = new PagedDataSource(); //待分页的数据源 public IEnumerable DataSource; //每页显示数据条数 public int pageSize = 10; //待分页显示的GridView对象 public GridView PageGridView; //当前页 public int CurrentPage { get { return (Int32)ViewState["CurrentPage"]; } set { ViewState["CurrentPage"] = value; } } //分页个数 public int Count { get { return (Int32)ViewState["Count"]; } set { ViewState["Count"] = value; } } //数据绑定 public void PageDataBind() { if (!IsPostBack) { CurrentPage = 0; Count = 0; } //用于判断是否越界 if (CurrentPage > Count || CurrentPage < 0) { return; } try { pds.DataSource = DataSource; pds.AllowPaging = true; pds.PageSize = pageSize; pds.CurrentPageIndex = CurrentPage; Count = pds.PageCount; this.lblTotalCount.Text = pds.DataSourceCount.ToString(); this.lblPageSize.Text = pageSiz
e.ToString(); this.lblCurrentPage.Text = Convert.ToString(CurrentPage + 1); this.lblTotalPage.Text = Convert.ToString(Count); PageGridView.DataSource = pds; PageGridView.DataBind(); } catch (Exception ex) { Response.Write("<script>alert('没有您输入的页!');</script>"); } } //第一页按钮按下时触发 protected void LinkFirst_Click(object sender, EventArgs e) { CurrentPage = 0; PageDataBind(); } //前一页按钮按下时触发 protected void LinkPrie_Click(object sender, EventArgs e) { if (CurrentPage <= 0) { CurrentPage = 0; } else { CurrentPage = CurrentPage-1; } PageDataBind(); } //下一页按钮按下时触发 protected void LinkNext_Click(object sender, EventArgs e) { if (CurrentPage >= (Count - 1)) { CurrentPage = Count - 1; } else { CurrentPage=CurrentPage+1; } PageDataBind(); } //最后一页按钮按下时触发 protected void LinkLast_Click(object sender, EventArgs e) { CurrentPage = Count - 1; PageDataBind(); } //GO按钮按下时触发 protected void btnGo_Click(object sender, EventArgs e) { CurrentPage = int.Parse(this.txtGoPage.Text)-1; PageDataBind(); }}
使用方法:
1.将此控件拖入到网页中。
2.在该网页的Page_Load()事件中写入如下代码。
- protected void Page_Load(object sender, EventArgs e)
- {
- this.WebUserControl1.DataSource = SaleChanceManager.GetChanceAll();
- this.WebUserControl1.pageSize = 5;
- this.WebUserControl1.PageGridView = this.GridView1;
- this.WebUserControl1.PageDataBind();
- }
protected void Page_Load(object sender, EventArgs e) { this.WebUserControl1.DataSource = SaleChanceManager.GetChanceAll();//设置待数据源 this.WebUserControl1.pageSize = 5;//设置每页数据条数 this.WebUserControl1.PageGridView = this.GridView1;//设置待分页的GridView this.WebUserControl1.PageDataBind();//调用绑定方法 }
5步就能学会使用这个ConfirmButtonExtender控件,半个代码都不需要你手动去写,微软出品的东西总是简单易用,貌似完全把使用者当白痴对待,汗~
1.在ASP.NET AJAX-Enabled Web Site中新建一个ConfirmButton.aspx文件。
2.拖入一个ScriptManager和一个UpdatePanel。
3.向UpdatePanel中拖入一个Button控件和一个ConfirmButtonExtender控件。
4.修改ConfirmButtonExtender控件的TargetControlID属性为Button的ID。
5.修改Button的ConfirmText属性,输入一段信息:尼克技术博客http://www.ineeke.com欢迎您光临!这段信息将在弹出的窗口中显示。
现在这个AJAX效果已经做好了,运行这个程序,单击一下Button就能看到效果了。不过这个效果用不着这么麻烦吧,微软是不是脑子秀逗了,完全可以直接用JavaScript弹的嘛!
AlwaysVisibleControlExtender控件直译出来就是“始终显示”。个人感觉这个控件貌似有点多余,不知道究竟有多大用处。既便如此,我们还是得了解了解它。
我们把浏览器的窗口若分成3行3列的话,AlwaysVisibleControlExtender控件便可以让我们要显示的信息在这分出来的9个方框的任何一个中出现。下面来看看具体如何使用它。
首先创建一个ASP.NET AJAX-Enabled Web Site,打开默认创建好的Default.aspx文件并进入设计模式。
你将会看到一个ScriptManager控件在上面,千万可别把它删除哦,删了就不能使用AJAX了。
向页面中拖入一个UpdatePanel控件,再分别向UpdatePanel中拖入一个panel和一个AlwaysVisibleControlExtender控件。在pnael中我们可以写一些信息,例如:
尼克技术博客
学习笔记
,接下来选中AlwaysVisibleControlExtender控件并修改其属性TargetControlID为写有信息的那个panel。
接下来再向UpdatePanel中拖入一个DropDownList同时启用DropDownList的AutoPostBack属性,并为其增加如下几项值:
- <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged">
- <asp:ListItem Value="11">默认</asp:ListItem>
- <asp:ListItem Value="00">左上</asp:ListItem>
- <asp:ListItem Value="01">中上</asp:ListItem>
- <asp:ListItem Value="02">右上</asp:ListItem>
- <asp:ListItem Value="10">左中</asp:ListItem>
- <asp:ListItem Value="11">中中</asp:ListItem>
- <asp:ListItem Value="12">右中</asp:ListItem>
- <asp:ListItem Value="20">左下</asp:ListItem>
- <asp:ListItem Value="21">中下</asp:ListItem>
- <asp:ListItem Value="22">右下</asp:ListItem>
- </asp:DropDownList>
<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged"> <asp:ListItem Value="11">默认</asp:ListItem> <asp:ListItem Value="00">左上</asp:ListItem> <asp:ListItem Value="01">中上</asp:ListItem> <asp:ListItem Value="02">右上</asp:ListItem> <asp:ListItem Value="10">左中</asp:ListItem> <asp:ListItem Value="11">中中</asp:ListItem> <asp:ListItem Value="12">右中</asp:ListItem> <asp:ListItem Value="20">左下</asp:ListItem> <asp:ListItem Value="21">中下</asp:ListItem> <asp:ListItem Value="22">右下</asp:ListItem></asp:DropDownList>
双击DropDownList的SelectedIndexChanged事件,并写入如下代码:
- switch (this.DropDownList1.SelectedValue[0])
- {
- case ’0′:
- avce.VerticalSide = VerticalSide.Top;
- break;
- case ’1′:
- avce.VerticalSide = VerticalSide.Middle;
- break;
- case ’2′:
- avce.VerticalSide = VerticalSide.Bottom;
- break;
- default:
- &n
bsp; avce.VerticalSide = VerticalSide.Middle;
- return;
- }
- switch (this.DropDownList1.SelectedValue[1])
- {
- case ’0′:
- avce.HorizontalSide = HorizontalSide.Left;
- break;
- case ’1′:
- avce.HorizontalSide = HorizontalSide.Center;
- break;
- case ’2′:
- avce.HorizontalSide = HorizontalSide.Right;
- break;
- default:
- avce.HorizontalSide = HorizontalSide.Center;
- return;
- }
switch (this.DropDownList1.SelectedValue[0]) { case '0': avce.VerticalSide = VerticalSide.Top; break; case '1': avce.VerticalSide = VerticalSide.Middle; break; case '2': avce.VerticalSide = VerticalSide.Bottom; break; default: avce.VerticalSide = VerticalSide.Middle; return; } switch (this.DropDownList1.SelectedValue[1]) { case '0': avce.HorizontalSide = HorizontalSide.Left; break; case '1': avce.HorizontalSide = HorizontalSide.Center; break; case '2': avce.HorizontalSide = HorizontalSide.Right; break; default: avce.HorizontalSide = HorizontalSide.Center; return; }
现在你可以保存并运行这个AJAX了,在下拉框中选中你要它显示的位置,它就会根据你的指令走了。

如果你觉得你的信息框不好看,那么你可以在panel的属性中对其样式进行修改。
至于DropDownList1.SelectedValue[0]其意就是取出当前选中的值的索引为0的字符,例如Value="11"那么这里取出的便是“1”,之后对其进行判断,进而改变panel在网页中的位置。