2016-05-23 62 views
0

我想在數據網格中只顯示15行並滾動以獲取其餘數據。意思我有一個datagrid高度是可變的,我想要這樣的東西 row height = datagrid height/15。如何修復顯示在datagrid中的行數?

+0

DataGrid具有'RowHeight'屬性。設置並在必要時更新 – ASh

+0

如何只顯示15行,其餘我可以通過滾動查看它們 – Imoum

回答

1

創建一個Border,其中包含一個ScrollViewer,其中包含DataGrid。將DataGridRowHeightMultiBinding綁定到BorderActualHeightDataGridColumnHeaderHeight。要檢索RowHeight的值,請使用IMultiValueConverter

轉換器:

using System; 
using System.Globalization; 
using System.Windows.Data; 

namespace XXX 
{ 
    public class HeightConverter : IMultiValueConverter 
    { 
     public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) 
     { 
      double allHeight = (double)values[0]; 
      double headerHeight = (double)values[1]; 

      return (allHeight - headerHeight)/15; 
     } 

     public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) 
     { 
      throw new NotImplementedException(); 
     } 
    } 
} 

而且這裏的XAML:

<Border Name="YourBorder"> 
    <ScrollViewer> 
     <DataGrid Name="YourGrid" 
       ItemsSource="{Binding Items}" 
       Padding="0" 
       Margin="0" 
       ColumnHeaderHeight="30"> 
     <DataGrid.RowHeight> 
      <MultiBinding Converter="{StaticResource HeightConverter}"> 
      <Binding Path="ActualHeight" ElementName="YourBorder"/> 
      <Binding Path="ColumnHeaderHeight" ElementName="YourGrid"/> 
      </MultiBinding> 
     </DataGrid.RowHeight> 
     <DataGrid.Columns> 
      <!-- YOUR COLUMNS TEMPLATES - don't put fixed height here! --> 
     </DataGrid.Columns> 
     </DataGrid> 
    </ScrollViewer> 
    </Border> 

Items:一個模擬的集合,我測試這個解決方案中創建。

ColumnHeaderHeight:你必須設置它或它將是NaN。我設置了30',因爲它看起來適合正常的標題文本,但如果您有自定義標題,請自行檢查。

當您拉伸窗口時,您會看到行的大小調整,因此它們始終保持可見狀態,其他可通過滾動條到達。

希望這是你正在尋找。

+1

這個[問答](http://stackoverflow.com/questions/23905923/wpf-datagrid-actual-columnheaderheight)顯示瞭如何找到實際的標題高度。我在完全相同的情況下使用它 – ASh

0

我得到了一個解決方案,我只是在datagrid_loaded事件中添加了幾行代碼。

private void dataGridXX_Loaded(object sender, RoutedEventArgs e) 
{ 
    dataGridXX.RowHeight = dataGridXX.RenderSize.Height/15; 
} 
+0

首先,如果DataGrid的標題佔據一部分高度(我的解決方案),則解決方案不起作用。其次,如果調整窗口大小,RowHeight不會相應地修改(我的解決方案)。 –