Wpf 数据表排序行为(双值不被视为数字)
我在数据库中的一个表中有一个名为price的字段,它的类型是varchar。在我的窗口中,有一个listview和一个gridview,它们绑定到该表。我已将gridview的GridViewColumnHeader\u Click事件设置为:Wpf 数据表排序行为(双值不被视为数字),wpf,sorting,gridview,datatable,Wpf,Sorting,Gridview,Datatable,我在数据库中的一个表中有一个名为price的字段,它的类型是varchar。在我的窗口中,有一个listview和一个gridview,它们绑定到该表。我已将gridview的GridViewColumnHeader\u Click事件设置为: private void GridViewColumnHeader_Click(object sender, RoutedEventArgs e) { datatable.DefaultView.Sort = "price ASC"; d
private void GridViewColumnHeader_Click(object sender, RoutedEventArgs e)
{
datatable.DefaultView.Sort = "price ASC";
datatable.DefaultView.ToTable();
}
<GridViewColumn Header="price" DisplayMemberBinding="{Binding price, Converter={StaticResource convert1}}" />
它对price列进行排序,但它将价格值视为字符串,因此它将价格排序为字符串,而不是数字。这种行为是预期的,因为price字段的类型是varchar。为了解决这个问题,我将价格转换为两倍,如下所示:
private void GridViewColumnHeader_Click(object sender, RoutedEventArgs e)
{
datatable.DefaultView.Sort = "price ASC";
datatable.DefaultView.ToTable();
}
<GridViewColumn Header="price" DisplayMemberBinding="{Binding price, Converter={StaticResource convert1}}" />
但这并没有解决问题,价格仍然被视为字符串而不是双倍。
这个问题看起来可能是重复的。但这些问题在这里或任何其他网站上都没有得到回答,这个问题仍然是个问题。请帮助解决这个问题。请不要建议在视图中使用转换器将字段price的类型从varchar更改为int,这不会影响DataTable的DataView的排序方式……转换器只是一个UI格式化的东西,因此无法工作 您应该真正更改列的类型。或者,您可以向DataTable中添加另一列并按此列进行排序。大概是这样的:
private void GridViewColumnHeader_Click(object sender, RoutedEventArgs e)
{
if (!datatable.Columns.Contains("price2"))
{
datatable.Columns.Add(new DataColumn("price2") { DataType = typeof(double) });
foreach (DataRow dr in datatable.Rows)
{
dr["price2"] = Convert.ToDouble(dr["price"]);
}
}
datatable.DefaultView.Sort = "price2 ASC";
datatable.DefaultView.ToTable();
}
或者,您可以简单地创建具有适当列类型的DataTable副本,并使用此副本而不是原始DataTable:
这就是问题的答案。几分钟前我想到了这个解决方案,我想写下答案,但幸运的是看到你完成了任务,谢谢@mm8。