SharePoint GridView的使用2——DataSourceView的使用
首先創(chuàng)建一個abstract類,繼承Microsoft.SharePoint.WebControls.DataTableDataSourceView。之后基于這個類可以創(chuàng)建多個顯示不同數(shù)據(jù)的的DataSourceView,在上文的DataSource控件中有個ViewName屬性,可以通過這個屬性來區(qū)分不同的DataSourceView,從而顯示不同的數(shù)據(jù)。
abstract DataSourceView的實(shí)現(xiàn):
????????public?string?Filter
????????{
????????????get
????????????{
????????????????if?(ViewState["Filter"]?==?null)
????????????????{
????????????????????return?"";
????????????????}
????????????????return?ViewState["Filter"].ToString();
????????????}
????????????set
????????????{
????????????????ViewState["Filter"]?=?value;
????????????}
????????}
????????public?string?FilterExpression
????????{
????????????get
????????????{
????????????????if?(mFilterExpression?==?null)
????????????????{
????????????????????return?"";
????????????????}
????????????????return?mFilterExpression;
????????????}
????????????set
????????????{
????????????????Filter?=?value;
????????????????if?(this.FilterExpression?!=?value)
????????????????{
????????????????????this.mFilterExpression?=?value;
????????????????????this.OnDataSourceViewChanged(EventArgs.Empty);
????????????????}
????????????}
????????}
Filter用來記錄過濾條件,SPGridView通過FilterExpression將界面上用戶點(diǎn)擊的過濾條件傳入這個屬性中。
之后在繼承這個DataSourceView的子類中實(shí)現(xiàn)排序和過濾的功能。而分頁是通過SharePoint的一個SPGridViewPager綁定這個SPGridView控件就可實(shí)現(xiàn),我就不介紹了。
DataSourceView子類的實(shí)現(xiàn):
public?class?ACFrontEndDataSourceView?:?ACDataSourceView
????{
????????private?static?readonly?string[]?mColumnNames?=?new?string[]?{?"Name",?"Status",?"Address"?};
????????public?ACFrontEndDataSourceView(DataSourceControl?owner,?string?viewName,?HttpContext?context)
????????????:?base(owner,?viewName,?context)
????????{
????????}
????????protected?override?void?FillDataTable(DataTable?table,?DataSourceSelectArguments?selectArguments)
????????{
????????????
????????????try
????????????{
????????????????bool?isDesc?=?false;
????????????????string?sort?=?"Name";
????????????????
????????????????if?(!String.IsNullOrEmpty(this.SortField))
????????????????{
????????????????????sort?=?this.SortField;
????????????????????isDesc?=?this.SortDir.Equals("DESC");
????????????????}
????????????????else?if?(selectArguments.SortExpression?!=?null?&&?selectArguments.SortExpression?!=?String.Empty)
????????????????{
????????????????????sort?=?selectArguments.SortExpression;?
????????????????????if?(selectArguments.SortExpression.EndsWith("DESC"))
????????????????????{
????????????????????????isDesc?=?true;
????????????????????????sort?=?sort.Substring(0,?sort.IndexOf("DESC")).Trim();
????????????????????}
????????????????}
????????????????int?count?=?0;
????????????????ArrayList?serverList?=?new?ArrayList();
????????????????if?(IsFilter)
????????????????{
????????????????????//獲取所需填充的全部數(shù)據(jù)
????????????????}
????????????????else
????????????????{
????????????????????//獲取Count值,表示根據(jù)Filter過濾條件的條目個數(shù)
????????????????????//根據(jù)Filter過濾條件獲取所有條目列表serverList
????????????????????for?(int?i?=?0;?i?<?this.PageIndex;?i++)
????????????????????{
????????????????????????for?(int?j?=?0;?j?<?this.PageSize;?j++)
????????????????????????{
????????????????????????????table.Rows.Add(table.NewRow());
????????????????????????}
????????????????????}
????????????????}
????????????????foreach?(object?server?in?serverList)
????????????????{
????????????????????DataRow?row?=?table.NewRow();
????????????????????row[0]?=?"";
????????????????????row[1]?=?"";
????????????????????row[2]?=?"";
????????????????????table.Rows.Add(row);
????????????????}
????????????????if?(!IsFilter)
????????????????{
????????????????????for?(int?i?=?0;?i?<?count?-?(this.PageIndex?+?1)?*?this.PageSize;?i++)
????????????????????{
????????????????????????table.Rows.Add(table.NewRow());
????????????????????}
????????????????}
????????????}
????????????catch(Exception?ex)
????????????{
????????????????throw?ex;
????????????}
????????}
????????protected?override?IEnumerable?Select(DataSourceSelectArguments?selectArguments)
????????{
????????????DataTable?table?=?this.CreateDataTable();
????????????this.FillDataTable(table,?selectArguments);
????????????DataView?defaultView?=?table.DefaultView;
????????????return?defaultView;
????????}
????????protected?override?string[]?ColumnNames
????????{
????????????get
????????????{
????????????????return?mColumnNames;
????????????}
????????}
????????protected?override?string?DefaultSortExpression
????????{
????????????get
????????????{
????????????????return?"Name?ASC";
????????????}
????????}
????}
?
這樣就可以實(shí)現(xiàn)SharePoint的過濾與排序功能,并且在DataTable中填充需要顯示的數(shù)據(jù),而不是全部。
然而SharePoint的過濾仍然不很讓人滿意,因?yàn)橹荒苡幸粋€過濾條件。如何實(shí)現(xiàn)SharePoint的多條件過濾呢?通過使用Reflector對SPGridView的源代碼進(jìn)行查看,我發(fā)現(xiàn)SharePoint SPGridView只能實(shí)現(xiàn)單過濾條件,而且不能在界面出現(xiàn)過濾圖標(biāo)。如何實(shí)現(xiàn)多過濾將在之后的文章中進(jìn)行介紹。
轉(zhuǎn)載于:https://www.cnblogs.com/wangzhiyang/archive/2009/02/02/1382511.html
總結(jié)
以上是生活随笔為你收集整理的SharePoint GridView的使用2——DataSourceView的使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python进阶(十七)xml(下)
- 下一篇: 使用Microsoft Media Se