2012-03-05 10 views
7

मुझे यह जानने की जरूरत है कि WPF डेटाग्रिड उपयोगकर्ता द्वारा क्रमबद्ध किया गया है। Sorted घटना क्यों नहीं है? मुझे केवल एक छंटनी घटना मिल सकती है।डाटाग्रिड: क्या कोई सॉर्टेड ईवेंट नहीं है?

मैंने CollectionView और ListCollectionView की भी जांच की जो बिना किसी किस्मत के दृश्यों को उजागर कर रहा है।

मुझे आश्चर्य है कि यह बॉक्स से बाहर आना चाहिए। कोई विचार?

+0

MSDN पूछने के लिए "क्यों" एक बेहतर जगह हो सकती है। –

+0

हैंडल सॉर्ट करें और बस डेटाग्रिड को सॉर्ट करें। – Paparazzi

+0

संभाल सॉर्ट करें? तुम्हारा मतलब सॉर्टिंग है? – Houman

उत्तर

1

डाटाग्रिड में "छंटनी" घटना है, इसकी सदस्यता लें!

XAML:

<DataGrid ItemsSource="{Binding YourItems}" AutoGenerateColumns="True" anUserSortColumns="True" 
      Sorting="DataGrid_Sorting"/> 

.cs कोड:

private void DataGrid_Sorting(object sender, System.Windows.Controls.DataGridSortingEventArgs e) 
{ 
    Console.WriteLine(string.Format("sorting grid by '{0}' column in {1} order", e.Column.SortMemberPath, e.Column.SortDirection)); 
} 
+1

यह निश्चित रूप से स्वीकार किया जाना चाहिए – Jonesopolis

+3

यह सही उत्तर नहीं है। ओपी विशेष रूप से कहता है कि वह एक क्रमबद्ध घटना चाहता है, एक छंटनी घटना नहीं। अंतर यह है कि क्या आइटम पहले ही हल हो चुके हैं या नहीं। ओलिवर डुफनेर की टिप्पणी [डुप्लिकेट प्रश्न] को इंगित करती है (http://stackoverflow.com/questions/8416961/how-can-i-be-notified-if-a-datagrid-column-is-sorted-and-not-sorting) सही प्रतिक्रिया है। – Wally

1

मैं MSDN documentation से एक उदाहरण ले लिया है और यह समायोजित जब छंटाई घटना से किया जाता है किसी क्रमित घटना को बढ़ाने के लिए किया है।

public class CustomDataGrid : DataGrid 
{ 
    // Create a custom routed event by first registering a RoutedEventID 
    // This event uses the bubbling routing strategy 
    public static readonly RoutedEvent SortedEvent = EventManager.RegisterRoutedEvent(
     "Sorted", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(CustomDataGrid)); 

    // Provide CLR accessors for the event 
    public event RoutedEventHandler Sorted 
    { 
     add { AddHandler(SortedEvent, value); } 
     remove { RemoveHandler(SortedEvent, value); } 
    } 

    // This method raises the Sorted event 
    void RaiseSortedEvent() 
    { 
     RoutedEventArgs newEventArgs = new RoutedEventArgs(CustomDataGrid.SortedEvent); 
     RaiseEvent(newEventArgs); 
    } 

    protected override void OnSorting(DataGridSortingEventArgs eventArgs) 
    { 
     base.OnSorting(eventArgs); 
     RaiseSortedEvent(); 
    } 
} 

फिर आप इसे कोडबेंड में उपयोग कर सकते हैं।

datagrid.Sorted += new RoutedEventHandler(datagrid_Sorted); 

या XAML

में
<local:CustomDataGrid x:Name="datagrid" Sorted="datagrid_Sorted;"/> 
संबंधित मुद्दे