1

誰かがこの問題にいくつかのガイダンスを提供することができるでしょうか:

DataTableにバインドされているDataGridがあります。

関連するXAMLとコード:

<DataGrid Name="dataGrid1" IsReadOnly="True" ItemsSource="{Binding}" 
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Path=Name}" />
<DataGridTextColumn Header="Path" Binding="{Binding Path=Path}" />
</DataGrid.Columns>


dataGrid1.DataContext = gridData.dt; // this is a DataTable with 3 columns.

3番目のdt列はグリッドに表示されません。IDとして使用されます。

データテーブルは最初の列でソートされ、内容が表示されます。ユーザーは、名前またはパスの列/見出しをクリックして並べ替えることができ、視覚的に並べ替えることができます。問題は、特定の行を選択してグリッドのデータを調べると、DataTableのデータが並べ替えられないままになることです。

私の質問ですが、ユーザーが列の1つで並べ替えたときに、グリッドの基になるデータを更新するための最良のアプローチは何ですか?(これには、DataTableを適切な列に並べ替える必要があります)

これは私が観察したものです:

  1. DataGridColumnHeaderにClickイベントハンドラーを追加すると、イベントが発生します。columnHeader.SortDirection(送信側)の値が現在の値であり、ターゲット値ではないことを確認しました。特定の列の並べ替え順序が次のフェーズを通過すると言うのは正しいですか:null->昇順降順->昇順昇順から降順

IE現在の状態を知ることにより、次の状態を判別できます。

  1. DataGridColumnHeaderのSortDirectionプロパティにトリガーを配置して、昇順/降順/ nullを探すことができますが、それではどうしますか?これに対してコードを実行できますか?もしそうなら、コードフラグメントを見せてくれませんか。

私は同様の投稿を行い、次のことを実行しようとしました。

  • DataGridを1つにバインドして、CollectionViewSourceを試してみました。実験として、列ヘッダーのクリックイベントをトラップし、列に並べ替え順序を強制しました。これは機能しませんでした。(私の実装は間違っている可能性がありますか?)

  • 特定のDataGridTextColumnエントリのXAMLにSortedMemberPath="xx"を追加しました。

どんな援助も大歓迎です。

4

1 に答える 1

1

DataGrid.Sortingイベントを使用します。

public class DataGrid : MultiSelector
{
    ...

    //
    // Summary:
    //     Occurs when a column is being sorted.
    public event DataGridSortingEventHandler Sorting;

    ...
}

イベント ハンドラーで、e.Columnプロパティを使用して、データの並べ替えに使用された列を確認します。

void dataGrid1_Sorting(object sender, DataGridSortingEventArgs e)
{
    e.Column ... // TODO
}
于 2012-08-16T15:18:24.460 に答える