自定义控件(HolyrongGridView)-扩展GridView控件(3):自定义排序
2009-03-20 17:18
369 查看
1.自定义控件(HolyrongGridView)-扩展GridView控件(1):基础知识
2.自定义控件(HolyrongGridView)-扩展GridView控件(2):自定义分页
3.自定义控件(HolyrongGridView)-扩展GridView控件(3):自定义排序
1.主要功能:
只要设置两个属性:AllowSorting和AllowHolyrongSorting为true就系统就会自动进行字段的排序。当然,如果不是自动产生的列,还要为需要排序的字段设置排序属性。
2.属性说明:
3.主要功能代码:
2.自定义控件(HolyrongGridView)-扩展GridView控件(2):自定义分页
3.自定义控件(HolyrongGridView)-扩展GridView控件(3):自定义排序
1.主要功能:
只要设置两个属性:AllowSorting和AllowHolyrongSorting为true就系统就会自动进行字段的排序。当然,如果不是自动产生的列,还要为需要排序的字段设置排序属性。
2.属性说明:
#region AllowHolyrongSorting private bool _allowHolyrongSorting = true; [Category("Holyrong Extend"), Description("是否允许HolyrongSorting模式排序。当设置为true时,HolyrongGridView自动进行排序功能的实现,而不需要用户进行后台编码。但必须保证数据源为DataSet,DataTable或DataView。"), NotifyParentProperty(true)] public virtual bool AllowHolyrongSorting { get { return _allowHolyrongSorting; } set { _allowHolyrongSorting = value; } } #endregion #region AllowSortingTip private bool _allowSortingTip = true; [Category("Holyrong Extend"), Description("是否显示排序提示图片或文本。"), NotifyParentProperty(true)] public virtual bool AllowSortingTip { get { return _allowSortingTip; } set { _allowSortingTip = value; } } #endregion #region AscImgUrl private string _ascImgUrl; [Category("Holyrong Extend"), Description("升序排序显示的图标链接。"), Editor("System.Web.UI.Design.UrlEditor", typeof(System.Drawing.Design.UITypeEditor)), NotifyParentProperty(true) ] public virtual string AscImgUrl { get { return _ascImgUrl; } set { _ascImgUrl = value; } } #endregion #region AscText private string _ascText; [Category("Holyrong Extend"), Description("升序排序显示的文本,有图标时只显示图标不该显示文本。"), NotifyParentProperty(true)] public virtual string AscText { get { return _ascText; } set { _ascText = value; } } #endregion #region DescImgUrl private string _descImgUrl; [Category("Holyrong Extend"), Description("降序排序显示的图标链接。"), Editor("System.Web.UI.Design.UrlEditor", typeof(System.Drawing.Design.UITypeEditor)), NotifyParentProperty(true)] public virtual string DescImgUrl { get { return _descImgUrl; } set { _descImgUrl = value; } } #endregion #region DescText private string _descText; [Category("Holyrong Extend"), Description("降序排序显示的文本,有图标时只显示图标不该显示文本。"), NotifyParentProperty(true)] public virtual string DescText { get { return _descText; } set { _descText = value; } } #endregion #region ToString public override string ToString() { return ""; } #endregion
3.主要功能代码:
public class HolyrongSortingFunction:ExtendFunctions { public HolyrongSortingFunction() : base() { } public HolyrongSortingFunction(HolyrongGridView hgv) : base(hgv) { } protected override void Execute() { if (this._hgv.HolyrongSorting.AllowHolyrongSorting) { this._hgv.Sorting += new System.Web.UI.WebControls.GridViewSortEventHandler(_hgv_Sorting); if (this._hgv.HolyrongSorting.AllowSortingTip) { this._hgv.RowDataBound += new GridViewRowEventHandler(_hgv_RowDataBound); } } } void _hgv_Sorting(object sender, System.Web.UI.WebControls.GridViewSortEventArgs e) { e.SortExpression = GetSortExpression(e); this._hgv.SetViewState(e.SortExpression);//将当前排序表达式存储在ViewState中。 SortDataSource(e.SortExpression); //将数据源按新排序规则重新排序 } void _hgv_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.Header) { foreach (TableCell tc in e.Row.Cells) { if (tc.Controls.Count ==1 && tc.Controls[0] is LinkButton) //该列允许排序(有排序字段)。 { DisplaySortTips(tc); //设置和显示排序提示图标或文本 } } } } #region DisplaySortTips(设置和显示排序提示图标或文本) /// <summary> /// 设置和显示排序提示图标或文本 /// </summary> /// <param name="tc">要排序的列标题单元格</param> private void DisplaySortTips(TableCell tc) { string sortExpression = this._hgv.ViewStateSortExpression; string sortColumn = null; string[] sortColumns = sortExpression.Split(','); sortColumn = ((LinkButton)tc.Controls[0]).CommandArgument; int sortColumnIndex = Array.FindIndex(sortColumns,delegate(string s){return s.IndexOf(sortColumn)==0;}); if (sortColumnIndex >= 0) //如果排序表达式中有当前列 { string sortText = null; string sortImgUrl = null; SortDirection sortDirection = SortDirection.Ascending; if (sortColumns[sortColumnIndex].IndexOf("DESC") >= 0) { sortDirection = SortDirection.Descending; } if (sortDirection == SortDirection.Ascending) //升序 { sortText = this._hgv.HolyrongSorting.AscText; sortImgUrl = this._hgv.HolyrongSorting.AscImgUrl; if (String.IsNullOrEmpty(sortText) && String.IsNullOrEmpty(sortImgUrl))//如果用户没有制定排序提示文本和提示图标,则用系统默认图标 { sortImgUrl = this._hgv.Page.ClientScript.GetWebResourceUrl(this.GetType(), "HolyrongControls.HolyrongGridView.Resource.Asc.gif"); } } else { sortText = this._hgv.HolyrongSorting.DescText; sortImgUrl = this._hgv.HolyrongSorting.DescImgUrl; if (String.IsNullOrEmpty(sortText) && String.IsNullOrEmpty(sortImgUrl))//如果用户没有制定排序提示文本和提示图标,则用系统默认图标 { sortImgUrl = this._hgv.Page.ClientScript.GetWebResourceUrl(this.GetType(), "HolyrongControls.HolyrongGridView.Resource.Desc.gif"); } } if (!String.IsNullOrEmpty(sortImgUrl)) { Image img = new Image(); img.ImageUrl = sortImgUrl; tc.Controls.Add(img); } else if (!String.IsNullOrEmpty(sortText)) //只有当用户没有指定图标路径时才有可能显示排序提示文本。 { tc.Controls.Add(new LiteralControl(sortText)); } tc.Controls.Add(new LiteralControl((sortColumnIndex + 1).ToString()));//排序列的排序序号 } } #endregion #region SortDataSource(将数据源按新排序规则重新排序) /// <summary> /// 将数据源按新排序规则重新排序 /// </summary> /// <param name="sortExpression">新的排序规则</param> private void SortDataSource(string sortExpression) { DataView dv = GridViewFunctions.GetGridViewDataSource(this._hgv); dv.Sort = sortExpression; this._hgv.DataBind(); } #endregion #region GetSortExpression(获取HolyrongGridView的排序表达式) /// <summary> /// 获取HolyrongGridView的排序表达式 /// </summary> /// <param name="e">GridViewSortEventArgs</param> /// <returns></returns> private string GetSortExpression(System.Web.UI.WebControls.GridViewSortEventArgs e) { string newSortExpression = this._hgv.ViewStateSortExpression; //用来存储HolyrongGridView新的排序表达式 if (newSortExpression.IndexOf(e.SortExpression) >= 0) { ModifySortExpression(ref newSortExpression,e.SortExpression); //如果原复合排序表达式中存在 } else { newSortExpression += String.Concat(",", e.SortExpression, " ASC"); } return newSortExpression.Trim(','); } /// <summary> /// 修改原排序表达式 /// </summary> /// <param name="newSortExpression">原排序表达式</param> /// <param name="currSortExpression">当前的排序列</param> private void ModifySortExpression(ref string newSortExpression,string currSortExpression) { string ascSortExpression = String.Concat(currSortExpression, " ASC"); //当前需要排序的字段的升序排序表达式 string descSortExpression = String.Concat(currSortExpression, " DESC"); //当前需要排序的字段的降序排序表达式 if (newSortExpression.IndexOf(ascSortExpression) >= 0) //如果是升序排列,则改为降序。 { newSortExpression = newSortExpression.Replace(ascSortExpression, descSortExpression); } else if (newSortExpression.IndexOf(descSortExpression) >= 0) { newSortExpression = newSortExpression.Replace(descSortExpression, "").Replace(",,",","); } } #endregion }
相关文章推荐
- 扩展GridView实现的一个自定义无刷新分页,排序,支持多种数据源的控件TwfGridView
- Asp.net 2.0 自定义控件开发[创建自定义HeaderRow的GridView控件][示例代码下载]
- 扩展GridView控件(10) - 自定义分页样式
- Asp.net 2.0 自定义控件开发[创建自定义HeaderRow的GridView控件][示例代码下载]
- Asp.net 2.0 自定义控件开发[创建自定义HeaderRow的GridView控件][示例代码下载]
- Asp.net 2.0 自定义控件开发[创建自定义HeaderRow的GridView控件][示例代码下载]
- 使用draggablegridview开源库添加自定义控件可以显示,添加自定义的layout文件可以显示背景色但是无法显示其控件
- Asp.net 2.0 自定义控件开发[创建自定义HeaderRow的GridView控件][示例代码下载]
- 扩展GridView控件(2) - 复合排序和排序状态提示
- 扩展GridView控件(10) - 自定义分页样式
- Asp.net 2.0 自定义控件开发[创建自定义HeaderRow的GridView控件][示例代码下载]
- 自定义控件(HolyrongGridView)-扩展GridView控件(1):基础知识
- Asp.net 2.0 自定义控件开发[创建自定义HeaderRow的GridView控件][示例代码下载]
- 扩展GridView控件(2) - 复合排序和排序状态提示
- Asp.net 2.0 自定义控件开发[创建自定义HeaderRow的GridView控件][示例代码下载]
- 上接扩展GridView控件(10) - 自定义分页样式
- Asp.net 2.0 自定义控件开发[创建自定义HeaderRow的GridView控件][示例代码下载]
- 扩展GridView控件(10) - 自定义分页样式
- 上接扩展GridView控件(2) - 复合排序和排序状态提示
- Asp.net 2.0 自定义控件开发[创建自定义HeaderRow的GridView控件][示例代码下载]