定制分类侵入术



我想在Infgragistics中使用自定义排序。我读到我可以使用icomparer。

我有一个带有字符串数据类型的Ultragridcolumnd。我喜欢从另一列是长的数据类型中按值进行排序。

有可能吗?

是的,这是可能的,可以使用ICOMPARER接口确切地实现。每个Ultragrid列都有sortComparer属性,可以分配实现ICOMPARER接口的对象。如文档中有关sortcomparer属性的文档:

属性用于执行自定义排序比较时进行排序时 此列。在iComparer的比较方法中传递的值 将是两个Ultragridcell对象。

这是有关您的方案的代码段,因为比较值来自另一列。

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }
    private void Form1_Load(object sender, EventArgs e)
    {
        ultraGrid1.DataSource = InitializeDataSource(10);
        ultraGrid1.DisplayLayout.Override.HeaderClickAction = HeaderClickAction.SortMulti;
        ultraGrid1.DisplayLayout.Bands[0].Columns[0].SortComparer = new CustomComparer();
    }
    private DataTable InitializeDataSource(int rows)
    {
        DataTable table = new DataTable();
        table.Columns.Add("String Column", typeof(string));
        table.Columns.Add("Long Column", typeof(long));
        for (int index = 0; index < rows; index++)
        {
            table.Rows.Add(new object[] { "Text", index });
        }
        return table;
    }
}
public class CustomComparer : IComparer
{
    public int Compare(object x, object y)
    {
        var valueColumn = "Long Column";
        var firstCell = x as UltraGridCell;
        var secondCell = y as UltraGridCell;
        var firstCellValue = (long)firstCell.Row.Cells[valueColumn].Value;
        var secondCellValue = (long)secondCell.Row.Cells[valueColumn].Value;
        if (firstCellValue == secondCellValue)
        {
            return 0;
        }
        else if (firstCellValue > secondCellValue)
        {
            return -1;
        }
        else
        {
            return 1;
        }
    }
}

相关内容

  • 没有找到相关文章

最新更新