2012-01-22 46 views
21

Trong WPF, tôi có một DataGrid với một vài cột.Datagrid trong WPF - 1 cột mặc định được sắp xếp

Theo mặc định, có 1 Tôi muốn sắp xếp, nhưng tôi không thể tìm thấy cách tôi có thể thực hiện việc này.

Các DataGrid trong XAML trông như thế này:

<DataGrid x:Name="LibraryView" ItemsSource="{Binding Path=Elements[Persons]}" IsReadOnly="True" LoadingRow="dg_LoadingRow"> 
      <DataGrid.Columns> 
       <DataGridTextColumn Header="Name" Binding="{Binding Path=Element[Name].Value}" IsReadOnly="True" /> 
       <DataGridTextColumn Header="Score" Binding="{Binding Path=Element[Score].Value}" IsReadOnly="True" /> 
       <DataGridTextColumn Header="Date" Binding="{Binding Path=Element[Date].Value}" IsReadOnly="True" /> 
      </DataGrid.Columns> 
     </DataGrid> 

Và mã chỉ đằng sau nó là:

public ScoreBoard() 
{ 
    InitializeComponent(); 
    DataSet ds = dweMethods.DecryptAndDeserialize("ScoreData.xml"); 
    XElement TrackList = XElement.Parse(ds.GetXml()); 
    LibraryView.DataContext = TrackList; 
} 

Những gì tôi chỉ không thể tìm thấy là làm thế nào để làm cho nó theo mặc định được sắp xếp trên cột "Điểm".

Có ai giúp tôi chỉ cho tôi đúng hướng không?

+0

có một cái nhìn tại CollectionViewSource. –

+0

Tôi đã thử điều này: 'ICollectionView view = CollectionViewSource.GetDefaultView (dataGrid1.ItemsSource); view.SortDescriptions.Clear(); view.SortDescriptions.Add (new SortDescription ("LastName", ListSortDirection.Ascending)); view.Refresh(); 'Nhưng điều đó dường như không làm việc với mã trên của tôi, tôi không biết và không hiểu những gì tôi nên làm gì để làm cho nó hoạt động – Dante1986

+0

bạn đã xem xét phân loại trẻ em TrackList của bạn? –

Trả lời

42

Giải pháp cho điều này đơn giản hơn câu trả lời hiện tại cung cấp.

LƯU Ý: Sử dụng một CollectionViewSource sẽ cung cấp cho bạn sức mạnh và kiểm soát trong những tình huống hơn. Khi bạn đang học WPF, tôi khuyên bạn nên hiểu cách sử dụng CollectionViewSource để giải quyết vấn đề này cùng với các bộ sưu tập khác các vấn đề liên quan như NhómLọc.

CHỈNH SỬA: Điều này có thể do thay đổi trong đặc điểm kỹ thuật. Câu trả lời này dựa trên việc sử dụng .NET 4.0, tôi đã không nghiên cứu liệu giải pháp này có hoạt động trong các phiên bản cũ của khung công tác hay không.

Với XAML này

<DataGrid x:Name="LibraryView" ItemsSource="{Binding Path=Elements[Persons]}" IsReadOnly="True" LoadingRow="dg_LoadingRow"> 
     <DataGrid.Columns> 
      <DataGridTextColumn Header="Name" Binding="{Binding Path=Element[Name].Value}" IsReadOnly="True" /> 
      <DataGridTextColumn Header="Score" Binding="{Binding Path=Element[Score].Value}" IsReadOnly="True" /> 
      <DataGridTextColumn Header="Date" Binding="{Binding Path=Element[Date].Value}" IsReadOnly="True" /> 
     </DataGrid.Columns> 
    </DataGrid> 

Tất cả bạn cần làm là chọn một cột và chỉ định một hướng đi sắp xếp cho cột đó.

<DataGrid x:Name="LibraryView" ItemsSource="{Binding Path=Elements[Persons]}" IsReadOnly="True" LoadingRow="dg_LoadingRow"> 
      <DataGrid.Columns> 
       <DataGridTextColumn Header="Name" Binding="{Binding Path=Element[Name].Value}" IsReadOnly="True" /> 
       <DataGridTextColumn Header="Score" Binding="{Binding Path=Element[Score].Value}" IsReadOnly="True" SortDirection="Ascending" /> 
       <DataGridTextColumn Header="Date" Binding="{Binding Path=Element[Date].Value}" IsReadOnly="True" /> 
      </DataGrid.Columns> 
     </DataGrid> 

Điều này sẽ mặc định sắp xếp thành cột thứ 2 theo hướng tăng dần.

8

Chỉnh sửa: xem câu trả lời của James LaPenn bên dưới, nó phải là giải pháp được chấp nhận.


tôi đã mô tả làm thế nào để sắp xếp trong mã bằng cách đầu tiên của các cột ở đây: Initial DataGrid Sorting

Bạn có thể sửa lại mã để sắp xếp theo cột mong muốn cụ thể của bạn, mặc dù toàn bộ cách tiếp cận có vẻ lộn xộn.

Nếu bạn muốn làm điều đó trong XAML ... những gì có thể làm việc được thiết CollectionViewSource.SortDescriptions:

<CollectionViewSource x:Key="cvs" Source="{StaticResource myItemsSource}"> 
    <CollectionViewSource.SortDescriptions> 
     <scm:SortDescription PropertyName="MyPropertyName" Direction="Ascending"/> 
    </CollectionViewSource.SortDescriptions> 
</CollectionViewSource> 

Nhưng tôi chưa bao giờ cố gắng sau này.

+0

liên kết này bạn đã cung cấp (http://stackoverflow.com/questions/8944822/initial-datagrid-sorting/8946420#8946420) dường như thực sự hoạt động, nhưng chỉ với 1 nhược điểm tại thời điểm này. nó sắp xếp cột đầu tiên (tại đã nêu trong phương pháp) nhưng làm thế nào tôi có thể làm điều đó để làm cho nó sắp xếp thứ hai (hoặc khác)? – Dante1986

+0

đã nhận ngay bây giờ bằng cách thay đổi Columns.First(); tới Cột [1]; (thanx!) – Dante1986

+1

Bạn nên đề cập đến không gian tên cần thiết 'xmlns: scm =" clr-namespace: System.ComponentModel; assembly = WindowsBase "' – kskyriacou

2

Nếu bạn muốn làm điều đó programatically, bạn có thể làm như vậy như thế này:

MyDataGrid.ItemsSource = DataContext.RowItems.OrderBy(p => p.Score).ToList(); 
Các vấn đề liên quan