2010-09-30 24 views
9

Tôi có dữ liệu thống kê wpfTolkit. Ông có DataGrid.RowDetailsTemplate tôi cần phải làm nút khi nhấp vào nó sẽ mở rộng/sụp đổ.Tôi cần mở rộng/thu gọn cho RowDetailsTemplate

Làm thế nào để làm điều này tôi không thể tìm thấy trường hợp bạn muốn

<Custom:DataGrid RowDetailsVisibilityMode="VisibleWhenSelected" SelectionMode="Extended" CanUserAddRows="False" CanUserDeleteRows="False" CanUserResizeRows="False" CanUserSortColumns="False"> 
    <Custom:DataGrid.RowDetailsTemplate> 
     <DataTemplate> 
      <Custom:DataGrid> 
       <Custom:DataGrid.Columns> 
        <Custom:DataGridTextColumn Binding="{Binding idClient, Mode=Default}" Header="Ид" IsReadOnly="True"/> 
        <Custom:DataGridTextColumn Binding="{Binding name_client, Mode=Default}" Header="Имя" IsReadOnly="True"/> 
       </Custom:DataGrid.Columns> 
      </Custom:DataGrid> 
     </DataTemplate> 
    </Custom:DataGrid.RowDetailsTemplate> 
    <Custom:DataGrid.Columns> 
     <Custom:DataGridTemplateColumn> 
      <Custom:DataGridTemplateColumn.CellTemplate> 
       <DataTemplate> 
        <Expander IsExpanded="True"/> 
       </DataTemplate> 
      </Custom:DataGridTemplateColumn.CellTemplate> 
     </Custom:DataGridTemplateColumn> 
     <Custom:DataGridTextColumn Binding="{Binding idPartner, Mode=Default}" Header="Ид" IsReadOnly="True"/> 
     <Custom:DataGridTextColumn Binding="{Binding name_partner, Mode=Default}" Header="Имя" IsReadOnly="True"/> 
    </Custom:DataGrid.Columns> 
</Custom:DataGrid> 

Trả lời

0

Lựa chọn một Row trên lưới nên mở rộng Row sử dụng RowDetailsTemplate để hiển thị nội dung. Điều này làm cho Row Row được chọn và thiết lập giá trị của thuộc tính SelectedIndex của DataGrid.

Để thu gọn hàng, hãy đặt thuộc tính SelectedIndex của DataGrid thành -1.

2

Bao gồm Collapsed và mở rộng các sự kiện như sau

<Custom:DataGridTemplateColumn> 
    <Custom:DataGridTemplateColumn.CellTemplate> 
      <DataTemplate> 
       <Expander Collapsed="exp_Collapsed" Expanded="exp_Expanded"/> 
      </DataTemplate> 
     </Custom:DataGridTemplateColumn.CellTemplate> 
    </Custom:DataGridTemplateColumn> 

Trong đoạn mã sau

private void exp_Collapsed(object sender, RoutedEventArgs e) 
     { 
      this.dataGrid1.RowDetailsVisibilityMode = DataGridRowDetailsVisibilityMode.Collapsed; 
     } 

     private void exp_Expanded(object sender, RoutedEventArgs e) 
     { 
      this.dataGrid1.RowDetailsVisibilityMode = DataGridRowDetailsVisibilityMode.VisibleWhenSelected; 
     } 
13

Kiểm tra này ...

Adding a Button to a WPF DataGrid

HOẶC

XAML:

<DataGrid Name="dg1" AutoGenerateColumns="False" SelectionMode="Single" CanUserAddRows="false" CanUserDeleteRows="False" SelectionUnit="FullRow" > 
    <DataGrid.CellStyle> 
     <Style TargetType="DataGridCell"> 
      <Setter Property="BorderThickness" Value="0"/> 
     </Style> 
    </DataGrid.CellStyle> 

    <DataGrid.RowHeaderTemplate> 
     <DataTemplate> 
      <Expander Expanded="Expander_Expanded" Collapsed="Expander_Collapsed"> 

      </Expander> 
     </DataTemplate> 
    </DataGrid.RowHeaderTemplate> 

    <DataGrid.Columns> 
     <DataGridTextColumn Header="Name" IsReadOnly="True" Width="100" Binding="{Binding Name}" /> 
     <DataGridTextColumn Header="Title" IsReadOnly="True" Width="100" Binding="{Binding Title}" /> 
     <DataGridTextColumn Header="Job" IsReadOnly="True" Width="100" Binding="{Binding Job}" /> 
    </DataGrid.Columns> 

    <DataGrid.RowDetailsTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding Isi, Converter={StaticResource ResourceKey=isiTextConverter}}" Margin="10,5,0,0" /> 
     </DataTemplate> 
    </DataGrid.RowDetailsTemplate> 
</DataGrid> 

MainWindow.xaml.cs

private void Expander_Expanded(object sender, RoutedEventArgs e) 
{ 
    for (var vis = sender as Visual; vis != null; vis = VisualTreeHelper.GetParent(vis) as Visual) 
    if (vis is DataGridRow) 
    { 
     var row = (DataGridRow)vis; 
     row.DetailsVisibility = row.DetailsVisibility == Visibility.Visible ? Visibility.Collapsed : Visibility.Visible; 
     break; 
    } 
} 

private void Expander_Collapsed(object sender, RoutedEventArgs e) 
{ 
    for (var vis = sender as Visual; vis != null; vis = VisualTreeHelper.GetParent(vis) as Visual) 
     if (vis is DataGridRow) 
     { 
      var row = (DataGridRow)vis; 
      row.DetailsVisibility = row.DetailsVisibility == Visibility.Visible ? Visibility.Collapsed : Visibility.Visible; 
      break; 
     } 
} 

Output

enter image description here

.210
+2

btw, 'Expander_Expanded' và' Expander_Collapsed' giống hệt nhau. nếu nó được dự định, có thể có một phương thức duy nhất để xử lý các sự kiện 'Mở rộng' và' Đã thu gọn' – ASh

0

tôi đã được cải thiện các câu trả lời trước:

Thay vì sử dụng DataGrid.RowHeaderTemplate sử dụng DataGridTemplateColumn như sau:

<DataGridTemplateColumn> 
    <DataGridTemplateColumn.CellTemplate> 
      <DataTemplate> 
       <Expander Expanded="Expander_OnExpanded"  Collapsed="Expander_OnCollapsed"> 
       </Expander> 
      </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 
</DataGridTemplateColumn> 

Benifit là bạn không cần phải tái vị trí con chuột của bạn sau khi nhấp vào nút giãn nở.

Các vấn đề liên quan