0

私はSilverlightとRIAの両方に不慣れです。DomainDataSourceオブジェクトにバインドされたDataGridを持つ単純なフォームがあります。表示される行は、Webページに表示されるセクション見出しを表します。列の1つはOrdinalPositionと呼ばれ、グリッドがこの列でソートするように指定しました。上矢印ボタンと下矢印ボタンのあるカスタム列があります。望ましい動作は、ユーザーが上/下ボタンをクリックすると、OrdinalPositionがインクリメント/デクリメントされ、セクションが表示される順序を指定できるようにすることです。

OrdinalPosition列の値を手動で変更した場合、行から移動するとすぐにグリッドが並べ替えられます。ただし、コードビハインドを使用して値を変更した場合、グリッドはそれ自体を並べ替えません(グリッドは新しい値を表示しますが)。ボタンクリックのコードビハインドは次のとおりです...

    private void incrementOrdinal(object sender, System.Windows.RoutedEventArgs e)
    {
        Button btn = (Button)sender;
        Section s = (Section)sectionDataGrid.SelectedItem;
        s.Ordinal++;
        sectionDataGrid.CommitEdit();
    }

レコードを並べ替えるためにグリッドをキューに入れるためにすべきことはありますか?

4

1 に答える 1

0

DomainDataSourceがDataまたはDataViewを介して公開するデータを介して変更を適用するためにIEditableCollectionViewインターフェースが使用されない限り、DomainDataSourceはレコードが変更されたときにデータを自動的に再ソートしません。

次のようなものを試してください。

IEditableCollectionView view = (IEditableCollectionView)selectionDataGrid.ItemsSource;
Section s = view.CurrentItem;
view.EditItem(s);
s.Ordinal++;
view.CommitEdit();

これは、UIを介して編集を行うときにDataGridが実行することです。ItemsSourceは、ロードされたIEnumerableデータを表すDomainDataSourceViewクラスのインスタンスであるDomainDataSource.Dataプロパティにバインドされます。DomainDataSourceViewはIEditableCollectionViewを実装し、EditItemの使用後にそのビューに対してCommitEditが呼び出されると、現在のページのデータを再ソートします。

変更がある場合、ローカルで並べ替えると、アイテムを現在のページに移動したり、現在のページから移動したりできないことに注意してください。

于 2010-02-03T07:37:23.983 に答える