在GridViewEx中添加如下代码:
[Description( " 自定义的DataSet类型数据源 " ),Category( " 扩展 " )]
public virtual DataSet DataSetSource
{
get
{
return _ds;
}
set
{
_ds = value;
}
}
我们在使用GridViewEx的时候,就只需要设定DataSetSource属性,这个将限定本扩展组件只支持DataSet类型的数据源,其他类型数据源有兴趣的,大家可以进行扩展,象ArrayList,List<>这些都是可以的。
接下来的工作是为GridViewEx添加OnBind事件,如下:
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去类外部获取数据源,然后回到类本身来组织数据和进行绑定了。
接下来,需要声明两个方法
protected virtual string SortExpressionStr
{
get
{
if (ViewState["SortExpression"] == null)
{
return null;
}
return ViewState["SortExpression"].ToString();
}
set
{
ViewState["SortExpression"] = value;
}
}
[Description( " 排序方向 " ),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;
}
}
和下面的属性
{
get
{
if (ViewState["SortExpressionEx"] == null)
{
return null;
}
return ViewState["SortExpressionEx"].ToString();
}
set
{
ViewState["SortExpressionEx"] = value;
}
}
然后重写OnSorting事件如下:
{
SortExpressionEx = e.SortExpression;
SortExpressionStr = e.SortExpression + " " + SortDirectionStr;
OnBind();
if (SortDirectionStr.ToLower() == "asc")
{
SortDirectionStr = "DESC";
}
else
{
SortDirectionStr = "ASC";
}
}
并且增加如下的OnLoad事件
{
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")%></asp:TemplateField>
</Columns>
</cc1:GridViewEx>
后台只需要添加这样的方法
{
DataSet ds = new DataSet();
ds = //获得DataSet;
gridView1.DataSetSource = ds;
}
在页面中的Page_Load方法中,也不用再写
if(!Page.IsPostBack)
{
BindData();//绑定GridView的方法
}
注意,如果需要重新绑定GridView,只需要这样GridViewEx1.OnBind();即可。