0

我对排序数字有另一个问题,这些数字实际上是来自 DB 的字符串 [varchar]。在 WPF 列表视图中,单元格模板有一个文本框。

当数据从 DB 加载到 listview 中时,listview Salary 列绑定到数据表中的薪金列。由于其他一些业务逻辑,数据库表中的这个薪水列是varchar。

但是当它显示在列表视图中时,工资显示为“456.56”,就像列表视图中工资单元列中的浮动或十进制数字一样。由于底层数据源是数据表,所以 Salary 列是 varchar 数据类型!因此,在对 listview 工资列进行排序时,它不会像数字一样对工资列进行排序!

在这种情况下我可以使用 IComparer 吗?如果是这样,如何?任何例子都很有帮助!

4

1 回答 1

0

为什么不直接遍历数据,无论是在检索数据时,还是在显示数据之前在视图模型中,然后将数据解析为正确的数据类型?然后你可以让ListView做排序:

foreach (YourDataType item in yourItemCollection)
{
    YourDisplayDataType displayItem = new YourDisplayDataType(item.Property1, 
        item.Property2, decimal.Parse(item.DecimalVarcharProperty));
}

当然,如果您这样做,您需要确保decimal VARCHAR来自数据库值实际上都是十进制值。如果没有,您可以分两个阶段执行上述操作:

foreach (YourDataType item in yourItemCollection)
{
    decimal decimalValue = 0;
    decimal.TryParse(item.DecimalVarcharProperty, out decimalValue);
    YourDisplayDataType displayItem = new YourDisplayDataType(item.Property1, 
        item.Property2, decimalValue);
}

免责声明:我目前无法在编译器中检查这一点,因此可能存在错误......如果是这种情况,请告诉我,我会更新答案。

于 2013-10-05T14:15:05.957 回答