2009-08-07 65 views
3

我有一個數據網格定義爲WPF數據網格的列寬度和重新排序

<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> 

其上負載看起來很大。第一列適合適合內容和標題所需的最小寬度。第二列拉伸以填充數據網格的寬度的其餘部分(所以不具有第三填料塔)。但是,如果我試圖重新排序的列,該帳戶名列不能被調整到一個寬度不到什麼它的寬度是重新排序之前。所以我增加了一個處理程序上ColumnReordered事件,搞清楚我可以重新設置列寬,但它似乎並沒有工作。事實上,它縮小了ACCOUNTID列到幾乎沒有,而帳戶名欄仍然不能調整大小小。

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); 
      } 
     } 
    } 

有沒有更好的方式來處理列寬和爲何重新排序列打破在列集合列調整能力

回答

3

列並沒有改變立場。只有DisplayIndexes正在改變。試試這個:

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); 
      } 
     } 
    } 
相關問題