dev自定义排序,CustomColumnSort--------------------学习笔记

12 篇文章 0 订阅

一般的控件或者组件都支持按照某一列进行排序。但是,这种排序是根据数据源里的数据默认按照降序或升序排序的,同时这样的排序与字段的类型有关。

假设现在字段的类型是字符串类型 ,但是,存储的数据时数字加一些特殊的符号例如:20/1 ,1/5,1/30,0/2等等的数据。这时你不想根据字符串对它们进行排序,

而是想让它们按照数字进行排序例如:0/2,1/5,1/30,20/1。进行排序。

一般的排序都可以通过以下几种方式实现

有时候客户想要在一个域内对ASPxGridView的栏进行分组,而在另一个域内对其排序。本文中,我想描述一下如何通过不同的方法实现这个特点。因为,这并不像它可能看起来的那样简单。

在设计时,我们创建了一个简单的网格,它的数据从数据源控件处获得。我们想按城市来对ASPxGridView进行分组,而按国家对它进行排序。

这个任务可以通过以下几种方法来解决:

1.通过自定义栏位排序:按城市将网格分组,但是通过自定义栏位排序事件按国家对其排序。

2.在另一个域内对网格排序:按城市将网格分组,但是通过分组汇总排序信息类按国家对其排序。

3.通过自定义汇总类型对网格排序:按城市将网格分组,但是通过分组汇总排序信息类和自定义汇总计算事件按国家对其排序。

4.通过它们的名字对值进行排序:使用GridViewDataComboBoxColumn文本完成分组。

下面已第一种为例,此时就需要做下面两步就可以实现:

1.设置控件后组件的自定义排序属性:sortModel = custom;

2.再添加一个自定义事件

private void gridView1_CustomColumnSort(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnSortEventArgs e)
{
if (e.Column != null & e.Column.FieldName == "PACKAMOUNT")
{
string[] tempPacks1 = e.Value1.ToString().Split('/');
string[] tempPacks2 = e.Value2.ToString().Split('/');
int res = Comparer.Default.Compare(Convert.ToInt32(tempPacks1[0]), Convert.ToInt32(tempPacks2[0]));
if (res != 0) // 判断/之后的数据比较
{
e.Result = res;
e.Handled = true;
}
else if (tempPacks1.Length == 2 && tempPacks2.Length == 2)
{
int res1 = Comparer.Default.Compare(Convert.ToInt32(tempPacks1[1]), Convert.ToInt32(tempPacks2[1]));
e.Result = res1;
e.Handled = true;
}
else
{
e.Result = tempPacks1.Length > tempPacks2.Length ? 1 : -1;
e.Handled = true;
}
}
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值