2009-08-18 4 views
26

J'utilise C# dans Visual Studio 2008 et j'ai installé la boîte à outils WPF. J'ai créé un DataGrid dans testtest.xaml. Les colonnes ID et Parts $ ont la possibilité de trier le DataGrid en cliquant sur leurs en-têtes de colonne respectifs. Cependant, l'en-tête de colonne Date complète n'a pas cette capacité. J'ai utilisé la balise "DataGridTemplateColumn" pour mettre en forme les dates de cette colonne. Comment programmer l'en-tête de colonne Date complète pour pouvoir cliquer sur l'en-tête de la colonne Date complète et trier cette colonne. Si vous cliquez sur la colonne, la flèche n'est pas seulement affichée mais l'en-tête de la colonne n'est pas "cliquable". MerciCréation d'un en-tête de colonne DataGrid triable dans WPF à l'aide de C#

<Label Height="22" HorizontalAlignment="Left" Margin="10,45,0,0" Name="label1" VerticalAlignment="Top" Width="41">Task</Label> 
    <my:DataGrid ItemsSource="{Binding}" AutoGenerateColumns="False" Margin="140,83,67,28" Name="dataGrid1" GridLinesVisibility="Vertical" IsReadOnly="True"> 
     <my:DataGrid.Columns> 
      <my:DataGridTextColumn Binding="{Binding Path=[ID]}" Header="ID" /> 
      <my:DataGridTextColumn Binding="{Binding Path=p}" Header="Parts $" /> 
      <my:DataGridTemplateColumn SortMemberPath="" Header="Complete Date"> 
       <my:DataGridTemplateColumn.CellTemplate > 
        <DataTemplate> 
         <TextBlock> 
          <TextBlock.Text> 
           <Binding Path="CompleteDate" ConverterCulture="en-GB" StringFormat="{}{0:MM/dd/yyyy}"/> 
          </TextBlock.Text> 
         </TextBlock> 
        </DataTemplate> 
       </my:DataGridTemplateColumn.CellTemplate> 
      </my:DataGridTemplateColumn> 
     </my:DataGrid.Columns> 
    </my:DataGrid> 
</Grid> 

Répondre

53

Dans votre DataGridTemplateColumn vous avez SortMemberPath réglé sur "". Si vous définissez ceci à une propriété réelle sur l'élément (par exemple, CompleteDate), vous devriez être en mesure de trier. Vous pouvez également définir CanUserSort="true" ou CanUserSort="false" sur les colonnes sélectionnées. SortMemberPath donne la propriété à trier lorsque l'utilisateur tente un tri. Si ce n'est pas défini, la grille ne sait pas comment trier cette colonne (il ne pas utiliser le texte dans la colonne)

  <my:DataGridTemplateColumn SortMemberPath="CompleteDate" Header="Complete Date" CanUserSort="true"> 
      <my:DataGridTemplateColumn.CellTemplate > 
        <DataTemplate> 
         <TextBlock> 
          <TextBlock.Text> 
           <Binding Path="CompleteDate" ConverterCulture="en-GB" StringFormat="{}{0:MM/dd/yyyy}"/> 
          </TextBlock.Text> 
         </TextBlock> 
        </DataTemplate> 
       </my:DataGridTemplateColumn.CellTemplate> 
      </my:DataGridTemplateColumn> 
Questions connexes