>>51aspx首页 | >>Winform源码 | >>.Net源码大搜捕 | >>问题/帮助

Asp.net源码交流论坛

登录 注册
  • 标签
  • 会员
  • 搜索
  • 帮助

Asp.net源码交流论坛 » Asp.net交流讨论区 » Asp.net技术问答 » 转:手把手教你如何扩展GridView之自动排序篇

帖子标题
业务申请区
  • 实名认证申请
  • 免费.Net主机申请
  • 积分奖励申请
  • 有偿服务申请
Asp.net交流讨论区
  • Asp.net技术问答
  • .Net项目、服务交易区
  • .Net源码问答区
  • Asp.net技术文章
  • 常用工具下载
Asp.net资源发布区
  • [源码发布区]
  • [视频发布区]
  • [商业代码区]
  • [其他.net相关资源]
Asp.net专题讨论区
  • Ajax/Atlas无刷新技术
  • 面向对象开发
  • ADO.net讨论区
  • 控件专题讨论
源码环境搭建和部署视频! 源码使用常见问题 51Aspx自有服务产品 开业特惠 快速通道:[源码发布] | [实名认证]
1/1页1 跳转到页查看:4974
发新话题 回复该主题
键盘左右键可以进行前后翻页操作
帮助

转:手把手教你如何扩展GridView之自动排序篇

本主题由 部门经理 一半情弧 于 2007-6-13 19:52:02 执行 设置高亮 操作
离线 51aspx
头像

51aspx

  • [超级管理员]
  • [2792]
  • 2067
  • 2007-05-17
源码贡献奖实名用户
51aspx 2007-06-10 18:04 | 只看楼主 树型| 收藏| 小 中 大 1 #

转:手把手教你如何扩展GridView之自动排序篇

[实名用户所发信息,推荐关注实名贴,值得关注]


摘自:http://www.cnblogs.com/jillzhang    http://bbs.51aspx.com

  首先说说本文要实现的目的,大家都知道GridView支持排序,但是每次排序的时候,都需要给GridView添加OnSorting事件,这么繁琐而费力,作为世界上最最聪明的程序员的我们难道没有抱怨么?废话少说,不才想到了一种解决这个问题的方法,可以让大家一劳永逸。下面就让兄弟我臭摆一下,希望园子里面的高高手,大大牛们给给面子,捧捧场,别取消兄弟。
  首先创建一个GridViewEx的类,并继承GridView,然后添加如下委托
public delegate void BindEventHandler();
在GridViewEx中添加如下代码:
DataSet _ds;

[复制到剪贴板]
CODE:
        [Description("自定义的DataSet类型数据源"),Category("扩展")]
        public virtual DataSet DataSetSource
        {
            get
            {
                return _ds;
            }
            set
            {
                _ds = value;
            }
        }


我们在使用GridViewEx的时候,就只需要设定DataSetSource属性,这个将限定本扩展组件只支持DataSet类型的数据源,其他类型数据源有兴趣的,大家可以进行扩展,象ArrayList,List<>这些都是可以的。
接下来的工作是为GridViewEx添加OnBind事件,如下:

[复制到剪贴板]
CODE:

public event BindEventHandler Bind;
        public virtual void OnBind()
        {
            if (Bind != null)
            {
                Bind();
                if (DataSetSource != null)
                {
                    DataView dv = DataSetSource.Tables[0].DefaultView;
                    dv.Sort = SortExpressionStr;                 
                    this.DataSource = dv;
                    this.DataBind();                }
            }
        }


有了这个事件,我们就可以让GridView去类外部获取数据源,然后回到类本身来组织数据和进行绑定了。
接下来,需要声明两个方法

[复制到剪贴板]
CODE:
  [Description(&quot;排序表达式&quot;),Category(&quot;扩展&quot;)]
        protected virtual string SortExpressionStr
        {
            get
            {
                if (ViewState[&quot;SortExpression&quot;] == null)
                {
                    return null;
                }
                return ViewState[&quot;SortExpression&quot;].ToString();
            }
            set
            {
                ViewState[&quot;SortExpression&quot;] = value;
            }
        }
        [Description(&quot;排序方向&quot;),Category(&quot;扩展&quot;)]
        protected virtual string SortDirectionStr
        {
            get
            {
                if (ViewState[&quot;SortDirection&quot;] == null)
                {
                    return &quot;DESC&quot;;
                }
                if (ViewState[&quot;SortDirection&quot;].ToString().ToLower() != &quot;asc&quot; &amp;&amp; ViewState[&quot;SortDirection&quot;].ToString().ToLower() != &quot;desc&quot;)
                {
                    return &quot;DESC&quot;;
                }
                return ViewState[&quot;SortDirection&quot;].ToString();
            }
            set
            {
                ViewState[&quot;SortDirection&quot;] = value;
            }
        }


和下面的属性

[复制到剪贴板]
CODE:
public string SortExpressionEx
        {
            get
            {
                if (ViewState[&quot;SortExpressionEx&quot;] == null)
                {
                    return null;
                }
                return ViewState[&quot;SortExpressionEx&quot;].ToString();
            }
            set
            {
                ViewState[&quot;SortExpressionEx&quot;] = value;
            }
        }


然后重写OnSorting事件如下:

[复制到剪贴板]
CODE:
  protected override void OnSorting(GridViewSortEventArgs e)
        {
            SortExpressionEx = e.SortExpression;
            SortExpressionStr = e.SortExpression + &quot; &quot; + SortDirectionStr;
            OnBind();
            if (SortDirectionStr.ToLower() == &quot;asc&quot;)
            {
                SortDirectionStr = &quot;DESC&quot;;
            }
            else
            {
                SortDirectionStr = &quot;ASC&quot;;
            }
        }


并且增加如下的OnLoad事件

[复制到剪贴板]
CODE:

protected override void OnLoad(EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                try
                {
                    OnBind();
                }
                catch
                {
                }
            }
            base.OnLoad(e);
        }


经过上面这样简单的改造,您再次使用GridViewEx的时候,在前台页面使用的时候,您只要按照这样的格式就可以了:
<cc1:GridViewEx id="gridViewEx1"  runat="server" AllowSorting="True">
  <Columns>
    <asp:TemplateField HeaderText="序号" SortExpression="ID"><%#Eval(''ID")%></asp:TemplateField>
</Columns>
</cc1:GridViewEx>
后台只需要添加这样的方法

[复制到剪贴板]
CODE:
public void BindData()
{
  DataSet ds = new DataSet();
  ds = //获得DataSet;
  gridView1.DataSetSource = ds;
}


在页面中的Page_Load方法中,也不用再写

[复制到剪贴板]
CODE:
if(!Page.IsPostBack)
{
        BindData();//绑定GridView的方法
}


注意,如果需要重新绑定GridView,只需要这样GridViewEx1.OnBind();即可
最后编辑51aspx 最后编辑于 2007-11-29 18:56:05
技术问题请直接发布到论坛,客户服务QQ:1120930903,合作及咨询QQ:793095132
常见问题:点这里,请仔细查看!
基础配置视频: 点这里
问题搜索:请点击!
积分奖励: 关于论坛实名版块的建议...
 

TOP

 

发送短消息

查看公共资料

查找该会员全部帖子

  • 2
  • 27
  • 590 分
  • 364.6 元
  • 北京
  • 离线
  • QQ: 793095132 793095132
离线 qiulei_21
头像

蕾

  • [学员]
  • [7]
  • 7
  • 2007-12-25
qiulei_21 2008-01-03 13:04 树型| 收藏| 小 中 大 2 #

回复:转:手把手教你如何扩展GridView之自动排序篇



找不到类型或命名空间名称“Description”(是否缺少 using 指令或程序集引用?)
:'( ,怎么会出现这种错误?
 

TOP

 

发送短消息

查看公共资料

查找该会员全部帖子

  • 3476
  • 0
  • 0 分
  • 0.85 元
  • 西安
  • 离线
离线 ngdh83
头像

  • [实习生]
  • [22]
  • 14
  • 2009-02-25
ngdh83 2009-02-25 08:24 树型| 收藏| 小 中 大 3 #

回复:转:手把手教你如何扩展GridView之自动排序篇



谢谢各位的大公无私
 

TOP

 

发送短消息

查看公共资料

查找该会员全部帖子

  • 47395
  • 0
  • 9 分
  • -0.3 元
  • 离线
<<上一主题|下一主题>>
1/1页1 跳转到页
发表新主题 回复该主题

相关主题

求教报表问题
三层 网络收音机
电影管理系统
简单的论坛式留言本
简单的论坛式留言本
  • 发新主题

Asp.net源码下载专业站  - 源码推荐 - 最新源码  Sitemap

bbs.51Aspx.com - 简洁版本 - TOP - 界面风格

  • Default

Discuz!NT

Powered by Discuz!NT 2.6.1 © 2000-2010 51Aspx.com.

Processed in 0.125 second(s) , 6 queries. 京ICP备06046876号

  • 我的资料
  • 我的主题
  • 我的回复
  • 我的精华
  • 我的附件
  • 我的收藏
  • 基本状况
  • 流量统计
  • 客户软件
  • 发帖量记录
  • 版块排行
  • 主题排行
  • 发帖排行
  • 积分排行
  • 在线时间
帖子标题
作  者