12

初めてデータを Silverlight DataGrid コントロールにロードするときに、ユーザーが最初の列のヘッダーをクリックしたときとまったく同じように画面を表示するにはどうすればよいですか? つまり、データはその列の値に従って昇順で並べ替えられ、小さな並べ替え矢印が最初の列のヘッダーに表示される必要があります。

それが可能であると仮定すると、ユーザーが最初の列をクリックしてから 2 番目の列を Shift キーを押しながらクリックしたように見せることはできますか? つまり、プログラムで 2 つの部分からなる並べ替えを適用して、ユーザーが実行したかのように画面を表示することはできますか?

4

5 に答える 5

10

これが私の解決策でした:

if (pcv.CanSort == true)
{
      pcv.SortDescriptions.Add(new SortDescription("ProductionStatus", ListSortDirection.Ascending));
      pcv.SortDescriptions.Add(new SortDescription("Date", ListSortDirection.Descending));
}

ここで、pcv は PageCollectionView です。これは、最初に ProductionStatus プロパティで並べ替え、次に Date プロパティで並べ替えます。ただし、2列目にのみ小さなソート矢印が表示されます。

于 2010-12-13T10:10:31.740 に答える
6

私もこれを行う必要があり、DataGrid がこれを実行できるかどうかを熱心に調べました。

実際、DataGridColumnHeader クラスには InvokeProcessSort という適切なメソッドがありますが、これは内部的なものであり、DataGrid クラスの他の場所には表示されません。

私ができることは、データをバインドする直前にデータを事前に並べ替えることだけです。ICollectionView と ObservableCollection<> を実装するカスタム データ コレクションを使用していますが、これは問題なく動作しますが、最適ではなく、必ずしも必要とされない作業の負荷がかかります。

また、事前に並べ替えられたコレクションを提供すると、グリッドに並べ替えマーカーが表示されなくなります。

これを DataGrid バグトラッカーの問題として提起します - これは非常に大きな脱落であり、修正は非常に簡単です - MS は DataGridColumn および DataGrid クラスで適切なメソッドを公開する必要があるだけです。

于 2009-01-23T14:59:52.407 に答える
4

これを解決してくれた Paul Sherrif の小さな記事を見つけました...

http://weblogs.asp.net/psheriff/archive/2010/07/14/use-collectionviewsource-in-silverlight.aspx

基本的に、とにかく DataGrid を CollectionViewSource にバインドしていました。これには CollectionViewSource.SortDescriptions 設定のセットがあり、デフォルトの並べ替え順序を指定できます。

ありがとうポール!

于 2011-09-28T09:32:54.723 に答える
1

DomainDataSource に SortDescriptor を追加するだけです。

<riaControls:DomainDataSource.SortDescriptors>
    <riaControls:SortDescriptor PropertyPath="ColumnName" Direction="Descending" />
</riaControls:DomainDataSource.SortDescriptors>
于 2013-01-21T13:36:57.723 に答える
0

Silverlight 3+ には CollectionViewSource が存在します。

http://msdn.microsoft.com/en-us/library/system.windows.data.collectionviewsource(v=vs.95).aspx

Microsoft が提案しているように、XAML で既定の並べ替え順序を定義する簡単な方法があります。

CollectionViewSource を使用してマークアップで並べ替えを宣言する

 <Window.Resources>
   <app:MyData x:Key="MyData"/>
   <CollectionViewSource x:Key="cvs" Source={StaticResource MyData}>
     <CollectionViewSource.SortDescriptions>
        <SortDescription Property="Name"/>
     </CollectionViewSource.SortDescriptions>
   </CollectionViewSource>
 </Window.Resources>

 <DataGrid ItemsSource="{Binding Source={StaticResource cvs}}"/> 

https://connect.microsoft.com/VisualStudio/feedback/details/678782/set-default-sort-order-of-datagridのコメントにあり ます

Microsoftのサンプルに対する私の修正:

 <sort:SortDescription 
   PropertyName="Name"
   Direction="Ascending"
   xmlns:sort="clr-namespace:System.ComponentModel;assembly=System.Windows"
   /> 
于 2014-07-17T22:37:09.347 に答える