彩票走势图

教你如何扩展GridView之自动排序篇

转帖|其它|编辑:郝浩|2010-11-25 14:35:07.000|阅读 859 次

概述:大家都知道GridView支持排序,但是每次排序的时候,都需要给GridView添加OnSorting事件,这么繁琐而费力,作为世界上最最聪明的程序员的我们难道没有抱怨么?废话少说,不才想到了一种解决这个问题的方法,可以让大家一劳永逸。

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

  大家都知道GridView支持排序,但是每次排序的时候,都需要给GridView添加OnSorting事件,这么繁琐而费力,作为世界上最最聪明的程序员的我们难道没有抱怨么?废话少说,不才想到了一种解决这个问题的方法,可以让大家一劳永逸。

  首先创建一个GridViewEx的类,并继承GridView,然后添加如下委托

public delegate void BindEventHandler();

在GridViewEx中添加如下代码:

DataSet _ds;

[Description("自定义的DataSet类型数据源"),Category("扩展")]

public virtual DataSet DataSetSource

{

get

{

return _ds;

}

set

{

_ds = value;

}

}

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

接下来的工作是为GridViewEx添加OnBind事件,如下:

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去类外部获取数据源,然后回到类本身来组织数据和进行绑定了。

接下来,需要声明两个方法

[Description(";排序表达式"),Category("扩展")]

protected virtual string SortExpressionStr

{

get

{

if (ViewState[&quot;SortExpression"] == null)

{

return null;

}

return ViewState["SortExpression&quot;].ToString();

}

set

{

ViewState["SortExpression"] = value;

}

}

[Description("排序方向&quot;),Category("扩展")]

protected virtual string SortDirectionStr

{

get

{

if (ViewState["SortDirection"] == null)

{

return "DESC";

}

if (ViewState["SortDirection"].ToString().ToLower() != "asc" && ViewState["SortDirection"].ToString().ToLower() != "desc")

{

return "DESC";

}

return ViewState["SortDirection"].ToString();

}

set

{

ViewState["SortDirection"] = value;

}

}

和下面的属性

public string SortExpressionEx

{

get

{

if (ViewState[";SortExpressionEx"] == null)

{

return null;

}

return ViewState["SortExpressionEx"].ToString();

}

set

{

ViewState["SortExpressionEx"] = value;

}

}

然后重写OnSorting事件如下:

protected override void OnSorting(GridViewSortEventArgs e)

{

SortExpressionEx = e.SortExpression;

SortExpressionStr = e.SortExpression + " &quot; + SortDirectionStr;

OnBind();

if (SortDirectionStr.ToLower() == "asc")

{

SortDirectionStr = "DESC";

}

else

{

SortDirectionStr = "ASC";

}

}

并且增加如下的OnLoad事件

protected override void OnLoad(EventArgs e)

{

if (!Page.IsPostBack)

{

try

{

OnBind();

}

catch

{

}

}

base.OnLoad(e);

}

经过上面这样简单的改造,您再次使用GridViewEx的时候,在前台页面使用的时候,您只要按照这样的格式就可以了:

<cc1:GridViewEx id="gridViewEx1" OnBind="BindData" runat="server" AllowSorting="True">

<Columns>

<asp:TemplateField HeaderText="序号" SortExpression="ID"><%#Eval(''ID")%>&lt;/asp:TemplateField>

</Columns>

</cc1:GridViewEx>

后台只需要添加这样的方法

public void BindData()

{

DataSet ds = new DataSet();

ds = //获得DataSet;

gridView1.DataSetSource = ds;

}

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

if(!Page.IsPostBack)

{

BindData();//绑定GridView的方法

}

注意,如果需要重新绑定GridView,只需要这样GridViewEx1.OnBind();即可。

 


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn

文章转载自:网络转载

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP