2010-01-20 7 views
1

Ma page WPF dispose d'un contrôle RadGrid fourni par Telerik. La grille est une grille imbriquée qui signifie essentiellement que cliquer sur le signe (+) sur la colonne la plus à gauche de la ligne développe la ligne dans un sous-grille. Ceci est fait en spécifiant une grille hiérarchique dans mon XAML. Tout fonctionne très bien lorsque vous cliquez sur la ligne et développez la sous-grille mais l'élément selectedItem de la ligne initialement sélectionnée ne semble pas changer. Un exemple serait de sélectionner la ligne 1 de la grille initialement, puis d'étendre la ligne 4 pour afficher le sous-réseau. La sous-grille est affichée mais l'élément selectedItem est toujours la ligne 1. Le comportement souhaité est que la ligne 4 soit l'élément sélectionné une fois qu'il est développé pour afficher la sous-grille. Quelqu'un peut-il signaler ce qui ne va pas ici?Telerik Radgrid WPF

Merci

Répondre

1

Vous êtes à droite - est ici la version mise à jour:

private void RadGridView_Loaded(object sender, RoutedEventArgs e) 
    { 
     var childGrid = (RadGridView)sender; 
     var parentRow = childGrid.ParentRow; 

     if (parentRow != null) 
     { 
      RadGridView1.SelectedItem = childGrid.DataContext; 
      parentRow.IsExpandedChanged += new RoutedEventHandler(parentRow_IsExpandedChanged); 
     } 
    } 

    void parentRow_IsExpandedChanged(object sender, RoutedEventArgs e) 
    { 
     RadGridView1.SelectedItem = ((GridViewRow)sender).DataContext; 
    } 
+0

Merci Vlad. La logique ressemble à quelque chose qui résoudra le problème. Mais il semble que l'événement IsExpandedChanged n'est pas disponible pour le parentRow. A-t-il été ajouté à une version ultérieure de Telerik? –

+0

En effet cet événement est ajouté au T3 2009 SP1 - plus d'infos ici: http://www.telerik.com/products/wpf/whats-new/release-history/q3-2009-sp1-version-2009-3-1208 -183011105.aspx –

+0

Merci Vlad. CA aide. –

0

Voici un exemple:

XAML

<Window x:Class="WpfApplication1.Window1" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation"  
Title="Window1"> 
<Grid> 
    <telerik:RadGridView x:Name="RadGridView1" ItemsSource="{Binding}"> 
     <telerik:RadGridView.ChildTableDefinitions> 
      <telerik:GridViewTableDefinition /> 
     </telerik:RadGridView.ChildTableDefinitions> 
     <telerik:RadGridView.HierarchyChildTemplate> 
      <DataTemplate> 
       <telerik:RadGridView ItemsSource="{Binding Items}" Loaded="RadGridView_Loaded" /> 
      </DataTemplate> 
     </telerik:RadGridView.HierarchyChildTemplate> 
    </telerik:RadGridView> 
</Grid> 

C#

using System.Windows; 
using System.Linq; 

namespace WpfApplication1 
{ 
    public partial class Window1 : Window 
    { 
     public Window1() 
     { 
      InitializeComponent(); 

      DataContext = from i in Enumerable.Range(0, 10) 
          select new 
          { 
           ID = i, 
           Items = from j in Enumerable.Range(0, 10) 
             select new 
             { 
              ID = j, 
             } 
          }; 
     } 

     private void RadGridView_Loaded(object sender, RoutedEventArgs e) 
     { 
      RadGridView1.SelectedItem = ((FrameworkElement)sender).DataContext; 
     } 
    } 
} 
+0

Merci Vlad mais l'événement se déclenche Loaded que la première fois que la grille est chargé de façon cliquant sur le signe (+) pour la première fois appelle les RadGridView_Loaded, les clics suivants sur la même ligne ne provoquent pas l'événement. Un autre événement doit-il être associé à la grille parent ou enfant? –

Questions connexes