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/
ComponentOne Enterprise | 下载试用
ComponentOne 是一套专注于企业 .NET开发、支持 .NET Core 平台,并完美集成于 Visual Studio 的第三方控件集,包含 300 多种 .NET开发控件,提供表格数据管理、数据可视化、报表和文档、日程安排、输入和编辑、导航和布局、系统提升工具等七大功能,被誉为“.NET开发的‘瑞士军刀’”。
ComponentOne 为您提供专业的产品咨询服务,并由技术支持工程师为您1对1解答。>> 发帖提问
葡萄城热门产品


