C1FlexGrid for WinForms:使用CustomComparer自定义排序

C1FlexGrid for WinForms支持排序。它的内置排序有一些选项(忽略大小写,使用显示值等等)。它提供了Sort方法支持直接排序内容。如果有更多的需求,就需要创建类继承ICompare接口。本文就来介绍如何使用CustomComparer自定义排序。

发布于 2016/08/31 00:00

ComponentOne Enterprise

C1FlexGrid for WinForms支持排序。它的内置排序有一些选项(忽略大小写,使用显示值等等)。它提供了Sort方法支持直接排序内容。

如果有更多的需求,就需要创建类继承ICompare接口。

本文就来介绍如何使用CustomComparer自定义排序。

使用场景:排序尺寸

这里有一些尺寸需要排序larger或smaller,这些尺寸参数是:XS,S,M,L,XL和XXL。你可以需要比较尺寸,这个时候就需要就行自定义。

IComparer Interface

System.Collections.IComparer接口暴露了一个方法叫做:System.Collections.IComparer.Compare(System.Object,System.Object) 。它有2个对象作为参数(在这个对象里,是行对象),然后返回-1,0或是1.这个接口通过Sort方法提供自定义排序。

IComparer允许重用,重写比较,这对需要额外比较的需求的很有用。

对C1FlexGrid应用自定义排序

通过C1FlexGrid的Sort构造方法,以及连个IComparer接口,就可以对行的组进行特定的比较。

为了对尺寸应用排序,从IComparer接口继承。这个类会做比较重新做排序。

代码参考

private void sort_Click(object sender, EventArgs e)
{
c1FlexGrid1.Sort(new MyComparer(c1FlexGrid1)); // Perform a custom sort on the grid.
}

public class MyComparer: IComparer
{
C1FlexGrid cfg;
public MyComparer(C1FlexGrid cfg)
{
this.cfg = cfg;
}
public int Compare(object r1,object r2)
{
int cmp = 0;
string s1 = cfg[((Row)r1).Index, 3].ToString();
string s2 = cfg[((Row)r2).Index, 3].ToString();
if(s1=="XS")
{
if (s2 == "XS")
cmp = 0;
else
cmp = -1;
}
else if (s1 == "XXL")
{
if (s2 == "XXL")
cmp = 0;
else
cmp = 1;
}
else if (s1 == "S")
{
if (s2 == "XS")
cmp = 1;
else if (s2 == "S")
cmp = 0;
else
cmp = -1;
}
else if (s1 == "L")
{
if (s2 == "XS")
cmp = 1;
else if (s2 == "S")
cmp = 1;
else if (s2 == "M")
cmp = 1;
else if (s2 == "L")
cmp = 0;
else
cmp = -1;
}
else if (s1 == "M")
{
if (s2 == "XS")
cmp = 1;
else if (s2 == "S")
cmp = 1;
else if (s2 == "M")
cmp = 0;
else
cmp = -1;
}
else if (s1 == "XL")
{
if (s2 == "XXL")
cmp = -1;
else if (s2 == "XL")
cmp = 0;
else
cmp = 1;
}
return cmp;
}
}

本文的源代码请下载:


SortGrid.zip

更多内容:

C1FlexGrid控件简介: /developer/componentone/flexgrid

C1FlexGrid的下载地址:/download/?pid=3

如需更多帮助,可以到葡萄城开发者社区寻找更多资源以及帮助,地址:http://gcdn.grapecity.com.cn/

ComponentOne Enterprise | 下载试用

ComponentOne 是一套专注于企业 .NET开发、支持 .NET Core 平台,并完美集成于 Visual Studio 的第三方控件集,包含 300 多种 .NET开发控件,提供表格数据管理、数据可视化、报表和文档、日程安排、输入和编辑、导航和布局、系统提升工具等七大功能,被誉为“.NET开发的‘瑞士军刀’”。

ComponentOne 为您提供专业的产品咨询服务,并由技术支持工程师为您1对1解答。>> 发帖提问

相关产品
推荐相关案例
关注微信
葡萄城社区二维码

关注“葡萄城社区”

加微信获取技术资讯

加微信获取技术资讯

想了解更多信息,请联系我们, 随时掌握技术资源和产品动态