Asp.Net教程,WinForm教程,Asp.Net MVC,vs2008教程,vs2010教程,Silverlight技术,源码下载,Asp.Net视频教程
全站热门标签
vs2010 Silverlight 存储过程 水晶报表 ADO.NET JavaScript LINQ AjaxPro DataGridView 面向对象 Extjs GridView XML DevExpress HTML教程 Oracle jQuery 分页 GDI+ Visual C++2010 MySQL Office2010 WPF MVC Dojo WCF4.0 VB.NET Sql2005 textbox cookie WCF WinForm Discuz!NT SQL经典语句 T-SQL checkbox ASPxGridView F# asp.net SQL VS2008新特性 DropDownList Access TreeView Ajax VS2008 页面执行时间 Flex 字符串 回调 VB2005 DataSet C#时间 ASP.NET性能优化 用户在线检测 动画
jQuery JavaScript Html/Css Flex Dojo ExtJSAJAX
当前位置: 主页 > Web编程 > AJAX >

利用Anthem和ObjectDataSource创建无刷新的自定义分页控件

时间:2010-03-08 15:06来源:未知 作者:admin 点击:

由于工作的需要,为了提高以后的开发效率,故创建了这样的一个控件。
   具有以下优点:
   1.是数据源采用ObjectDataSource,可以实现将页面UI和业务逻辑分开。分页时,只读取当前页面需要的数据,提高了分页速度。
   2.继承Anthem中的GridView控件,可以实现无刷新翻页功能,增强了用户体验。
   3.只需给控件指定DataSourceID,实现DataSourceID中的分页方法,简单易用。

效果如图:


控件代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Drawing;
using System.Web.UI.HtmlControls;

namespace Jec.CustomControls
{
    [DefaultProperty(
"Text")]
    [ToolboxData(
"<{0}:JAGridView runat=server></{0}:JAGridView>")]
    
public class JAGridView : Anthem.GridView, INamingContainer
    {
        
//翻页按钮
        private Anthem.LinkButton lbtnFirst;
        
private Anthem.LinkButton lbtnPrev;
        
private Anthem.LinkButton lbtnNext;
        
private Anthem.LinkButton lbtnLast;
        
//当前页数  总页数 每页记录数 总记录数
        private Anthem.Label lbPageIndex;
        
private Anthem.Label lbPageCount;
        
private Anthem.Label lbPageSize;
        
private Anthem.Label lbRecordCount;
        
//记录总数
        private int recordCount;

        
//初始化GridView参数
        protected override void OnLoad(EventArgs e)
        {
            
this.AllowPaging = true;
            
this.PagerSettings.Visible = true;
            
base.OnLoad(e);
        }
        
protected override void InitializePager(GridViewRow row, int columnSpan, PagedDataSource pagedDataSource)
        {
            
//获取记录总数
            recordCount = pagedDataSource.DataSourceCount;
            
//初始化 导航按钮
            lbtnFirst = new Anthem.LinkButton();
            lbtnFirst.ID 
= "lbtnFirst";
            lbtnFirst.Text 
= "首页";
            lbtnFirst.CommandName 
= "First";
            lbtnFirst.Command 
+= new CommandEventHandler(lbtn_Command);
            lbtnPrev 
= new Anthem.LinkButton();
            lbtnPrev.ID 
= "lbtnPrev";
            lbtnPrev.Text 
= "上一页";
            lbtnPrev.CommandName 
= "Prev";
            lbtnPrev.Command 
+= new CommandEventHandler(lbtn_Command);
            lbtnNext 
= new Anthem.LinkButton();
            lbtnNext.ID 
= "lbtnNext";
            lbtnNext.Text 
= "下一页";
            lbtnNext.CommandName 
= "Next";
            lbtnNext.Command 
+= new CommandEventHandler(lbtn_Command);
            lbtnLast 
= new Anthem.LinkButton();
            lbtnLast.ID 
= "lbtnLast";
            lbtnLast.Text 
= "尾页";
            lbtnLast.CommandName 
= "Last";
            lbtnLast.Command 
+= new CommandEventHandler(lbtn_Command);
            
//下拉跳转列表
            Anthem.DropDownList ddl = new Anthem.DropDownList();
            
for (int i = 0; i < PageCount; i++)
            {
                ddl.Items.Add(
new ListItem(Convert.ToString(i + 1), i.ToString()));
            }
            ddl.EnableCallBack 
= true;
            ddl.AutoCallBack 
= true;
            ddl.SelectedIndexChanged 
+= new EventHandler(ddl_SelectedIndexChanged);
            ddl.SelectedIndex 
= PageIndex;

            
//初始化 状态列表
            lbPageIndex = new Anthem.Label();
            lbPageIndex.ID 
= "lbPageIndex";
            lbPageCount 
= new Anthem.Label();
            lbPageCount.ID 
= "lbPageCount";
            lbPageSize 
= new Anthem.Label();
            lbPageSize.ID 
= "lbPageSize";
            lbRecordCount 
= new Anthem.Label();
            lbRecordCount.ID 
= "lbRecordCount";

            Table tbl 
= new Table();
            tbl.BorderWidth 
= 0;
            tbl.Width 
= Unit.Percentage(100);
            tbl.Rows.Add(
new TableRow());

            TableCell cell_1 
= new TableCell();
            cell_1.Controls.Add(lbtnFirst);
            cell_1.Controls.Add(
new LiteralControl("&nbsp;"));
            cell_1.Controls.Add(lbtnPrev);
            cell_1.Controls.Add(
new LiteralControl("&nbsp;"));
            cell_1.Controls.Add(lbtnNext);
            cell_1.Controls.Add(
new LiteralControl("&nbsp;"));
            cell_1.Controls.Add(lbtnLast);
            cell_1.Controls.Add(
new LiteralControl("&nbsp;"));

            TableCell cell_2 
= new TableCell();
            cell_2.Controls.Add(ddl);
            cell_2.Controls.Add(
new LiteralControl("  当前页数:"));
            cell_2.Controls.Add(lbPageIndex);
            cell_2.Controls.Add(
new LiteralControl("  总页数:"));
            cell_2.Controls.Add(lbPageCount);
            cell_2.Controls.Add(
new LiteralControl("  每页记录数:"));
            cell_2.Controls.Add(lbPageSize);
            cell_2.Controls.Add(
new LiteralControl("  总记录数:"));
            cell_2.Controls.Add(lbRecordCount);

            tbl.Rows[
0].Cells.Add(cell_1);
            tbl.Rows[
0].Cells.Add(cell_2);
            tbl.Rows[
0].Cells[0].HorizontalAlign = HorizontalAlign.Left;
            tbl.Rows[
0].Cells[1].HorizontalAlign = HorizontalAlign.Right;

            
//将分页按钮和状态栏添加到 GridView的分页行
            row.Controls.AddAt(0new TableCell());
            row.Cells[
0].ColumnSpan = Columns.Count;
            row.Cells[
0].Controls.AddAt(0, tbl);
            SetPagerStatus();
        }
        
//改变下拉菜单 触发翻页
        protected void ddl_SelectedIndexChanged(object sender, EventArgs e)
        {
            PageIndex 
= ((DropDownList)sender).SelectedIndex;
        }
        
//点击按钮时 进行翻页
        void lbtn_Command(object sender, CommandEventArgs e)
        {
            
switch (e.CommandName)
            {
                
case "First":
                    {
                        PageIndex 
= 0;
                        
break;
                    }
                
case "Prev":
                    {
                        
if (PageIndex > 0)
                        {
                            PageIndex
--;
                        }
                        
break;
                    }
                
case "Next":
                    {
                        
if (PageIndex + 1 < PageCount)
                        {
                            PageIndex
++;
                        }
                        
break;
                    }
                
case "Last":
                    {
                        PageIndex 
= PageCount - 1;
                        
break;
                    }
            }
        }
        
//设置分页状态
        public void SetPagerStatus()
        {
            
//如果没记录则不显示
            if (PageCount == 0)
            {
                
this.Visible = false;
                
return;
            }
            
//第一页
            if (PageIndex == 0)
            {
                lbtnFirst.Enabled 
= false;
                lbtnPrev.Enabled 
= false;
                lbtnNext.Enabled 
= true;
                lbtnLast.Enabled 
= true;
            }
            
//最后一页
            else if (PageIndex == PageCount - 1)
            {
                lbtnFirst.Enabled 
= true;
                lbtnPrev.Enabled 
= true;
                lbtnNext.Enabled 
= false;
                lbtnLast.Enabled 
= false;
            }
            
//中间页
            else
            {
                lbtnFirst.Enabled 
= true;
                lbtnPrev.Enabled 
= true;
                lbtnNext.Enabled 
= true;
                lbtnLast.Enabled 
= true;
            }

            lbPageCount.Text 
= PageCount.ToString();
            lbRecordCount.Text 
= recordCount.ToString();
            lbPageIndex.Text 
= (PageIndex + 1).ToString();
            lbPageSize.Text 
= PageSize.ToString();

            lbtnFirst.UpdateAfterCallBack 
= true;
            lbtnPrev.UpdateAfterCallBack 
= true;
            lbtnNext.UpdateAfterCallBack 
= true;
            lbtnLast.UpdateAfterCallBack 
= true;
            lbPageIndex.UpdateAfterCallBack 
= true;
            lbPageCount.UpdateAfterCallBack 
= true;
            lbPageSize.UpdateAfterCallBack 
= true;
            lbRecordCount.UpdateAfterCallBack 
= true;
        }
    }
}
在aspx页面使用自定义控件,和GridView的使用方法几乎一样。DataSourceID设置为数据源的ID.
<cc1:JAGridView ID="JAGridView1" runat="server" AllowPaging="True" DataSourceID="ObjectDataSource1"
            AutoGenerateColumns
="false">
            
<Columns>
                
<asp:BoundField HeaderText="产品编号" DataField="ProductID" />
                
<asp:BoundField HeaderText="产品名称" DataField="ProductName" />
                
<asp:BoundField HeaderText="价格" DataField="UnitPrice" />
                
<asp:BoundField HeaderText="单位数量" DataField="QuantityPerUnit" />
            
</Columns>
            
<PagerStyle BackColor="#C0C0FF" ForeColor="ControlText" CssClass="Pager" />
</cc1:JAGridView>        
然后创建ObjectDataSource数据源
asp:ObjectDataSource ID="ObjectDataSource1" EnablePaging="true" TypeName="Test.Controls.App_Data.DataAccess"
SelectCountMethod
="GetPageCount" SelectMethod="GetCustomList" StartRowIndexParameterName="startRowIndex"
MaximumRowsParameterName
="maximumRows" runat="server"></asp:ObjectDataSource>
注意里面的几个参数 TypeName是业务逻辑层的名字空间+类名,SelectCountMethod需要你在业务逻辑中实现返回记录数的函数。SelectMethod需要在业务逻辑中实现选择分页相应记录的函数,该函数有startRowIndex和maximumRows两个参数,分别代码起始行数,返回的记录数。

最后创建业务逻辑和数据访问层如下:

   using System;
using System.Data;
using System.Configuration;
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.Data.SqlClient;

namespace Test.Controls.App_Data
{
    
public class DataAccess
    
{
        
public int GetPageCount()
        
{
            
using (SqlConnection conn = new SqlConnection("Data Source=(local);
User ID=sa;Password=sa;Initial Catalog=Northwind
"))       
     {
                conn.Open();
                SqlCommand cmd 
= new SqlCommand("select count(ProductID) from Products", conn);
                
return (int)cmd.ExecuteScalar();
            }

        }

        
public DataSet GetCustomList(int startRowIndex, int maximumRows)
        
{
            
using (SqlConnection conn = new SqlConnection("Data Source=(local);
User ID=sa;Password=sa;Initial Catalog=Northwind
"))
            
{
                DataSet ds 
= new DataSet();
                
try
                
{
                    conn.Open();
                    
string strSql = "SELECT * FROM (SELECT ROW_NUMBER() OVER (ORDER BY ProductID)
 AS RowNumber, * FROM Products) Results WHERE RowNumber between 
" + (startRowIndex + 1+
 
" and " + (startRowIndex + maximumRows);
                    SqlDataAdapter da 
= new SqlDataAdapter(strSql, conn);
                    ds 
= new DataSet();
                    da.Fill(ds);
                }

                
catch (Exception e)
                
{
                    
string a = e.ToString();
                }

                
return ds;
            }

        }

    }

}

 

(责任编辑:admin)
Tags:分页控件 Anthem ObjectDataSo
责任编辑:admin
返回顶部
------分隔线----------------------------
推荐内容
骆驼户外男 真皮磨砂日常休闲鞋 低帮 2011秋冬新款 专柜正品特价 骆驼户外男 真皮磨砂日常休闲鞋 低帮 2011秋冬新款 专柜正品特价
  • JQuery RadioButtonList

    首先介绍程序规则: 1.对以下的选择进行检查,检查是否全部选中 2,所谓的全部选中是指,一行中三个radiobutton必须有一个radiobutton被选中。...

  • JQuery实现智能输入提示(仿机票预订网站)

    最近在研究JQuery框架,JQuery是一套很优秀的JS框架,可以实现很多美观实用的控件。今天给大家推荐一个智能提示的空间,是模仿现在很多机票预订网站的城市智...

  • jQuery得到ashx返回的JSON格式的DataSet的方法

    jQuery得到ashx返回的JSON格式的DataSet的方法...

  • JQuery点击行(tr)实现checkBox选中,反选时移除和添加样式

    用到了三元运算符,和一个自定义的函数。 点击行时效果代码: $( tr ).live( click , function (){ if ($( this ).h...

  • 用jQuery模仿新浪微博时间组件

    废话不多说,实现原理主要是处理table,生成tr td,其中最重要的是如何找出每月第一天是星期几,然后就能对应出这个月的余下天数. 首先,说下有些人说这是重复...

  • Jquery之Ajax运用_学习运用篇

    JQuery中Ajax的运用相信很多人都已熟悉,本文主要是记录下个人实践中的应用知识,旨在加强记忆。 还是先说一些 基础知识: 语法:$.ajax({optio...

  • JQuery单选按钮和多选按钮状态判断

    function check_required() { var valid = true; var required=new Array; $(.require...

  • jQuery AJAX的小应用——手机号码归属地查询

    jQuery AJAX的小应用手机号码归属地查询 想测试下jQuery调用个第三方的WebService,利用 jQuery 的 $.get(url, data...

  • 多标签折页(jQuery示例)

    现在的垃圾留言越来越智能,并且从留言内容几乎看不出来是垃圾留言,而大量的垃圾留言会导致文章可读性下降,并可能会被搜索引擎惩罚,经过一段时间的分析和思考,我发现一...

  • JQuery 文本框高亮显示插件

    JQuery 中没有这个方法,自己今天写了一个Plugin,把代码贴出来分享一下; 代码如下: jquery-highlight.js /* descripti...

  • jquery的select插件

    Jquery是可以操作select表单控件的,比较反锁,下面是收集来的一个插件,还不错,能满足基本的选择。 可以使用这样的引入: type=text/javas...

  • 使用Jquery完成图片的预加载

    // 定义预加载图片列表的函数(有参数) jQuery.preloadImages = function (){ // 遍历图片 for ( var i = 0...

  • jQuery在asp.net中实现图片自动滚动

    时间真快,不知不觉12月已经过了一半了,新的一年即将到来。有段时间没写东西了,技术这东东天天都在更新,天天都是一个新面孔,如果不坚持学习肯定就会落在队尾。要想跟...

  • JQuery遍历表格指定列

    script type=text/javas cript $(function(){ $(#tb tr:gt(0)).each(function(){ var ...

  • AJAX无刷新下拉框联动

    AJAX无刷新下拉框联动的简单示例,分别使用了AJAX组件和xmlHttp异步刷新两种方式。 前台代码: %...@ Page Language=C# Auto...