2017-03-20 6 views
0

私のデータベースのテーブルの1つにpriceという名前のフィールドがあり、そのタイプはvarcharです。私のウィンドウでは、listviewとそのテーブルにバインドされているgridviewがあります。これは、価格の列をソートしますが、それはstring sと価格の値を扱いますので、stringのではなく、数値としての価格をソートデータ型ソートの振る舞い(double値は数値として扱われません)

private void GridViewColumnHeader_Click(object sender, RoutedEventArgs e) 
{ 
    datatable.DefaultView.Sort = "price ASC"; 
    datatable.DefaultView.ToTable(); 
} 

:私は次のようgridviewGridViewColumnHeader_Clickイベントを設定しています。この現象は、価格フィールドのタイプがvarcharだったために予想されます。

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

と::この問題を解決するために私は次のようdoubleに価格を変換

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のないdouble秒として扱われます。 この質問は重複して見えるかもしれません。しかし、同じ質問は答えられていません(ここや他のウェブサイトで)。この質問はまだ問題です。この問題を解決するのを手伝ってください。ビューにコンバータを使用して

答えて

1

を(varcharからintへのフィールドの価格の種類を変更することを提案しないでください)DataTableDataViewがソートされます...コンバータはただ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のこの1を使用することができます。

Sort string items in a datatable as int using c#

+0

これが答えです質問。私は数分前にこの解決策に出てきました。私は答えを書こうと思っていましたが、幸いにもあなたがタスクを完了したことを見ました、ありがとうございます@ mm8。 – Masoud

関連する問題