数据表排序行为(双值不被视为数字)

时间:2017-03-20 09:56:40

标签: wpf sorting gridview datatable

我的数据库中的一个表中有一个名为price的字段,其类型为varchar。在我的窗口中,我有一个绑定到该表的listviewgridview。我已将GridViewColumnHeader_Click的{​​{1}}事件设置如下:

gridview

它对价格列进行排序,但它将价格值视为private void GridViewColumnHeader_Click(object sender, RoutedEventArgs e) { datatable.DefaultView.Sort = "price ASC"; datatable.DefaultView.ToTable(); } s,因此它将价格排序为string s,而不是数字。此行为是预期的,因为价格字段的类型为string。为了解决这个问题,我将价格转换为varchar,如下所示:

double

<GridViewColumn Header="price" DisplayMemberBinding="{Binding price, Converter={StaticResource convert1}}" />

但这并没有解决问题,价格仍被视为public class dataConvert1 : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { return double.Parse(value.ToString()); } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { return new object(); } } 而不是string s。 这个问题看起来可能重复。但是没有回答相同的问题(这里或任何其他网站),这个问题仍然是一个问题。请帮忙解决这个问题。 (请不要建议将字段价格的类型从double更改为varchar

1 个答案:

答案 0 :(得分:1)

在视图中使用转换器不会影响DataView的{​​{1}}如何排序...转换器只是一个UI格式化的东西,所以这不起作用。

您应该真正更改列的类型。或者您可以向DataTable添加另一列并按此排序。像这样:

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

Sort string items in a datatable as int using c#