Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DataGridView单元格自定义_C#_Datagridview_Datagridviewcolumn - Fatal编程技术网

C# DataGridView单元格自定义

C# DataGridView单元格自定义,c#,datagridview,datagridviewcolumn,C#,Datagridview,Datagridviewcolumn,我想为datagridview创建一个单元格,该单元格将接受Int64值以进行排序 此外,该单元格将显示一个额外值,即当前值与datagridview外部的参考值的差值 我可以将其作为字符串进行处理,但排序将无法正确处理,因为它看起来像1、10、11、2。。。。等等 所以我想,如果我能创建一个自定义单元格,定义单元格的长值并显示一个字符串,那就太好了。。。但我不确定这是否能实现 有人知道如何用一种简单的方法来实现这一点吗?请注意,我正在手动加载datagridview,但我正在定义允许排序的列类

我想为datagridview创建一个单元格,该单元格将接受Int64值以进行排序

此外,该单元格将显示一个额外值,即当前值与datagridview外部的参考值的差值

我可以将其作为字符串进行处理,但排序将无法正确处理,因为它看起来像1、10、11、2。。。。等等

所以我想,如果我能创建一个自定义单元格,定义单元格的长值并显示一个字符串,那就太好了。。。但我不确定这是否能实现


有人知道如何用一种简单的方法来实现这一点吗?请注意,我正在手动加载datagridview,但我正在定义允许排序的列类型。

一种相当简单的方法是使用datagridview的SortCompare事件。使用事件检查正在排序的列是否显示自定义数据,如果是,则提取该数据的数字部分并对其进行排序

下面我举一个例子:

private void dataGridView1_SortCompare(object sender, DataGridViewSortCompareEventArgs e) {
    if (e.Column.Index == 1) {  // This is your custom data's column.
        // Extract the numeric values from the cells being compared for the sort.
        // BEWARE: code assumes you'll always be able to extract a long from the cell contents.
        long cell1NumericValue = Int64.Parse(e.CellValue1.ToString().Split(' ')[0]);
        long cell2NumericValue = Int64.Parse(e.CellValue2.ToString().Split(' ')[0]);

        // Compare these numeric values to determine how to sort.
        e.SortResult = cell1NumericValue.CompareTo(cell2NumericValue);

        e.Handled = true;
    }
}
假设: -包含自定义数据的列位于列索引1处 -您的自定义数据由数字和至少一个空格组成

我的代码还假设单元格值的转换不会抛出错误。您的数据可能包含会导致此转换失败的值。在这种情况下,您可以做的是在转换之前验证数据是否为空,等等。如果验证失败,请将单元格的数字值设置为-1或其他值,以便排序,因此它始终低于其他单元格中的有效值。我希望这是有道理的

应用这些类型的排序在中有很好的描述。你可能想看看。其中一个示例显示了在绑定情况下可以执行的操作。该示例显示了在另一列上作为排序tiebreaker进行排序