轉帖|其它|編輯:郝浩|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["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;
}
}
和下面的屬性
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 + " " + 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")%></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@fc6vip.cn
文章轉載自:網絡轉載