मैं WPF टूलकिट DataGrid पर DataGridTemplateColumn कैसे सॉर्ट कर सकता हूं?


92

मेरे पास एक DataGridTemplateColumn के साथ WPF Toolkit DataGrid है। मैंने एक ग्रिड विशेषता में निर्दिष्ट किया है कि मैं सभी स्तंभों को छांटना चाहता हूं, लेकिन DataGridTemplateColumn इसकी अनुमति नहीं देगा। अन्य सभी कॉलम छँटने की अनुमति देते हैं। मैं भी स्पष्ट रूप से उस स्तंभ के लिए सही करने के लिए CanUserSort स्थापित करने की कोशिश की है, लेकिन कोई भाग्य। क्या टेम्प्लेट कॉलम को छांटना भी संभव है? मैंने एक कस्टम सॉर्टर प्रदान किया है जो सभी कॉलमों के लिए काम करता है, लेकिन हेडर एक तरह के क्लिक की अनुमति नहीं देगा।

<Controls:DataGrid ItemsSource="{Binding Events}" AutoGenerateColumns="False" 
                               CanUserSortColumns="True" 
                               CanUserReorderColumns="False" 
                               Sorting="DataGrid_Sorting" 
                               x:Name="EventsGrid">
                <Controls:DataGrid.Columns>
                    <Controls:DataGridTemplateColumn Header="Type" Width="42" CanUserResize="False">
                        <Controls:DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <Image Source="{Binding EventTypeImage, Mode=OneWay}" HorizontalAlignment="Center" Width="16"/>
                            </DataTemplate>
                        </Controls:DataGridTemplateColumn.CellTemplate>
                    </Controls:DataGridTemplateColumn>
                    <Controls:DataGridTextColumn Header="Source" 
                                           Binding="{Binding Source, Mode=OneWay}" />
                    <Controls:DataGridTextColumn Header="Details" MinWidth="175" 
                                           Binding="{Binding Details, Mode=OneWay}" />
                    <Controls:DataGridTextColumn Header="Timestamp" MinWidth="175"  
                                           Binding="{Binding Timestamp, Mode=OneWay}" 
                                           IsReadOnly="True"/>
                </Controls:DataGrid.Columns>
            </Controls:DataGrid>

जवाबों:


171

आपको जिस CLR प्रॉपर्टी को छांटना है, उसके नाम SortMemberPathपर प्रॉपर्टी सेट करने की जरूरत है Controls:DataGridTemplateColumn


2
अच्छी तरह से काम। धन्यवाद!
Kilhoffer

6
चेतावनी का एक शब्द। यदि आप अंतर्निहित डेटा को बदलते हैं तो यह स्वचालित रूप से फिर से सॉर्ट नहीं होगा।
केली

1
एक और नोट: यह मूर्खतापूर्ण लग सकता है, लेकिन यदि आपके कॉलम में हैडर (शीर्षक) नहीं है, तो यह भी काम नहीं करेगा - हेडर पर क्लिक करने से छंटनी चालू हो जाती है। मेरे पास एक ऐसा कॉलम है जिसे हेडर की आवश्यकता नहीं है और मैंने हैडर = "" को सेट करके इसे सॉर्ट किया है
बोकोस्कोकोस

उम्मीद के
मुताबिक

33

SortMemberPath="Name"DataGridTemplateColumn में जोड़ा गया । यह छँटने लगा।

<data:DataGridTemplateColumn Header="Name" SortMemberPath="Name" CanUserSort="True">

15
 <DataGridTemplateColumn SortMemberPath="DataDiNascita" Header="Data di nascita" IsReadOnly="True">
                <DataGridTemplateColumn.CellEditingTemplate>
                    <DataTemplate>
                        <DatePicker SelectedDate="{Binding Path=DataDiNascita}"></DatePicker>
                    </DataTemplate>
                </DataGridTemplateColumn.CellEditingTemplate>
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding Path=DataDiNascita,StringFormat=\{0:dd/MM/yyyy\}}"></TextBlock>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.