2009-08-07 6 views
3

J'ai un DataGrid défini commela largeur des colonnes DataGrid WPF et réordonnancement

<wpftoolkit:DataGrid 
     x:Name="AccountsDataGrid" 
     AutoGenerateColumns="False" 
     ItemsSource="{Binding Path=Accounts}" 
     ColumnReordered="DataGrid_ColumnReordered" 
     SelectionUnit="FullRow" 
     RowHeaderWidth="0" 
     HorizontalAlignment="Stretch" 
     VerticalAlignment="Stretch" 
     > 
     <wpftoolkit:DataGrid.Columns> 
      <wpftoolkit:DataGridTextColumn Header="Account Id" Binding="{Binding Path=AccountId}" Width="Auto" /> 
      <wpftoolkit:DataGridTextColumn Header="Account Name" Binding="{Binding Path=AccountName}" Width="*" /> 
     </wpftoolkit:DataGrid.Columns> 
    </wpftoolkit:DataGrid> 

qui la charge ressemble beaucoup. la première colonne correspond à la largeur minimale nécessaire pour s'adapter à la fois au contenu et à l'en-tête. la deuxième colonne s'étire pour remplir le reste de la largeur du DataGrid (donc je n'ai pas une troisième colonne de remplissage). Mais si j'essaie de réorganiser les colonnes, la colonne AccountName ne peut pas être redimensionnée à une largeur inférieure à celle de sa largeur avant la réorganisation. J'ai donc ajouté un gestionnaire sur l'événement ColumnReordered, en pensant que je peux simplement réinitialiser les largeurs de colonnes, mais cela ne semble pas fonctionner. En fait, il réduit la colonne AccountId à presque rien, et la colonne AccountName ne peut toujours pas être redimensionnée plus petit.

private void DataGrid_ColumnReordered(object sender, Microsoft.Windows.Controls.DataGridColumnEventArgs e) 
    { 
     foreach (DataGridColumn column in AccountsDataGrid.Columns) 
     { 
      if (column.Equals(AccountsDataGrid.Columns.Last())) 
      { 
       column.Width = new DataGridLength(1.0, DataGridLengthUnitType.Star); 
      } 
      else 
      { 
       column.Width = new DataGridLength(1.0, DataGridLengthUnitType.Auto); 
      } 
     } 
    } 

est-il une meilleure façon de gérer la largeur des colonnes et pourquoi le redimensionnement de la colonne réordonnancement briser la colonne de capacité

Répondre

3

Les colonnes ne sont pas changer de position dans la collection de colonnes. Seuls les DisplayIndex sont en train de changer. Essayez ceci:

private void DataGrid_ColumnReordered(object sender, DataGridColumnEventArgs e) 
    { 
     int lastColumnOrder = AccountsDataGrid.Columns.Count() - 1; 
     foreach (DataGridColumn column in AccountsDataGrid.Columns) 
     { 
      if (column.DisplayIndex == lastColumnOrder) 
      { 
       column.Width = new DataGridLength(1.0, DataGridLengthUnitType.Star); 
      } 
      else 
      { 
       column.Width = new DataGridLength(1.0, DataGridLengthUnitType.Auto); 
      } 
     } 
    } 
Questions connexes