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

发布时间:2016/08/31 00:08 发布者:alice

返回博客中心

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;
}
}

 

本文的源代码请下载:

更多内容:

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

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

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


关于葡萄城

赋能开发者!葡萄城是专业的集开发工具、商业智能解决方案、低代码开发平台于一身的软件和服务提供商,为超过 75% 的全球财富 500 强企业提供服务。葡萄城专注控件软件领域30年,希望通过模块化的开发控件、灵活的低代码应用开发平台等一系列开发工具、解决方案和服务,帮助开发者快速响应复杂多变的业务需求,最大程度地发挥开发者的才智和潜能,让开发者的 IT 人生更从容更美好。

了解详情,请访问葡萄城官网