2010-09-30 15 views
9

Tengo wpfTolkit datagrid. Él tiene DataGrid.RowDetailsTemplate Necesito hacer el botón cuando haga clic en Expandir/Contraer.Necesito Expandir/Contraer para RowDetailsTemplate

Cómo hacer esto no pude encontrar el evento que desea

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

Respuesta

0

Cómo seleccionar una fila en la cuadrícula debe ampliar la fila mediante el RowDetailsTemplate para mostrar el contenido. Esto hace que Fila sea la Fila Seleccionada y establece el valor de la propiedad SelectedIndex de DataGrid.

Para contraer la fila, establezca la propiedad SelectedIndex de DataGrid en -1.

2

Incluir colapsado y eventos ampliado de la siguiente manera

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

En el código detrás

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

Marque esta ...

Adding a Button to a WPF DataGrid

O

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

salida

enter image description here

+2

btw, 'Expander_Expanded' y' Expander_Collapsed' son idénticos. si está destinado, puede haber un único método para manejar los eventos 'Expanded' y' Collapsed' – ASh

0

que han mejorado la respuesta anterior:

En lugar de utilizar DataGrid.RowHeaderTemplate utilizar DataGridTemplateColumn de la siguiente manera:

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

benifit es lo que necesita no volver a la posición de su ratón después de hacer clic en el botón de expansión.

Cuestiones relacionadas