2010-12-02 9 views
4
<telerik:RadGridView x:Name="rgvData" CanUserFreezeColumns="False" GridLinesVisibility="Horizontal" IsReadOnly="False" AutoGenerateColumns="False" 
         telerik:Theming.Theme="Office_Blue" ItemsSource="{Binding}" > 
     <telerik:RadGridView.ChildTableDefinitions> 
      <telerik:GridViewTableDefinition /> 
     </telerik:RadGridView.ChildTableDefinitions> 
     <telerik:RadGridView.Columns> 
      <telerik:GridViewDataColumn DataMemberBinding="{Binding StudentID}" Header="Category ID" /> 
      <telerik:GridViewDataColumn DataMemberBinding="{Binding StudentFN}" Header="Category Name" /> 
      <telerik:GridViewDataColumn DataMemberBinding="{Binding StudentLN}" Header="Description" /> 
      <telerik:GridViewDataColumn DataMemberBinding="{Binding Picture}" Header="Picture" /> 
     </telerik:RadGridView.Columns> 
     <telerik:RadGridView.HierarchyChildTemplate> 
      <DataTemplate> 
       <telerik:RadGridView x:Name="RadGridView1" Loaded="rgvData_Loaded" ShowInsertRow="True" CanUserInsertRows="True" ItemsSource="{Binding Subjects}" CanUserFreezeColumns="False" AutoGenerateColumns="False" ShowGroupPanel="False" IsReadOnly="False"> 
        <telerik:RadGridView.Columns> 
         <telerik:GridViewDataColumn DataMemberBinding="{Binding SubjectID}" Header="Order ID" /> 
         <telerik:GridViewDataColumn DataMemberBinding="{Binding SubjectName}" Header="Employee ID" /> 
         <telerik:GridViewDataColumn DataMemberBinding="{Binding SubjectProfessor}" Header="Order Date" /> 
         <telerik:GridViewDataColumn DataMemberBinding="{Binding ShipCountry}" Header="Ship Country" /> 
        </telerik:RadGridView.Columns> 
       </telerik:RadGridView> 
      </DataTemplate> 
     </telerik:RadGridView.HierarchyChildTemplate> 
    </telerik:RadGridView> 

MainXaml.Cs階層データグリッド子供

public partial class MainWindow : Window 
{ 
    DataAccessDataContext m_dcData; 
    public MainWindow() 
    { 
     InitializeComponent(); 
     this.Loaded += new RoutedEventHandler(MainWindow_Loaded); 
     this.rgvData.Items.CollectionChanged += new NotifyCollectionChangedEventHandler(Items_CollectionChanged); 
     rgvData.Filtered += new EventHandler<Telerik.Windows.Controls.GridView.GridViewFilteredEventArgs>(rgvData_Filtered); 
    } 

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

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

void parentRow_IsExpandedChanged(object sender, RoutedEventArgs e) 
{ 
    rgvData.SelectedItem = ((GridViewRow)sender).DataContext; 
}x 


    void rgvData_Filtered(object sender, Telerik.Windows.Controls.GridView.GridViewFilteredEventArgs e) 
    { 
     DataContext = m_dcData; 
     m_dcData = new DataAccessDataContext(); 
     m_dcData.Log = Console.Out; 
     rgvData.ItemsSource = m_dcData.Students; 
     rgvData.ShowInsertRow = true; 
    } 

    private void Items_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e) 
    { 
     try 
     { 
      if (e.Action == NotifyCollectionChangedAction.Add) 
      { 
       foreach (Student item in e.NewItems) 
       { 
        m_dcData.Students.InsertOnSubmit(item); 
       } 
      } 
      if (e.Action == NotifyCollectionChangedAction.Remove) 
      { 
       foreach (Student item in e.OldItems) 
       { 
        m_dcData.Students.DeleteOnSubmit(item); 
       } 
      } 
     } 
     catch (Exception s) 
     { } 
    } 
    void MainWindow_Loaded(object sender, RoutedEventArgs e) 
    { 
     m_dcData = new DataAccessDataContext(); 
     m_dcData.Log = Console.Out; 
     rgvData.ItemsSource = m_dcData.Students; 
     rgvData.ShowInsertRow = true; 

     rgvData.ItemsSource = m_dcData.Students; 
     rgvData.ShowInsertRow = true; 
    } 
} 

こんにちは私は、親のソースに関連した子データをロードするには問題がありません。問題は、別の行を展開しようとすると、その行の最初のデータが読み込まれるということです。たとえば、row1を展開して、正しい子テーブルを表示しても、row2に移動して展開すると、その子レコードはrow1になります。私は答えを探して、それを処理するparent_IsExpandedChangedイベントを入れてみましたが、それでも正しいデータは表示されません。アプリケーションを再読み込みして2行目または3行目を展開しようとすると、その子は正しいですが、別の行を展開した場合、行2または行3の子が表示されます

+0

任意のヘルプをしてください –

+0

イムをSQLクラスにLINQを使用して、SQL –

+1

からデータを取得するにはウルの問題が原因であるように見えますグリッド... telerik(http://www.telerik.com/community/forums.aspx)のフォーラムを使ってみてください。とても反応が速いです...あなたの質問にタグ 'telerik'を追加してください。それは簡単に – Mulki

答えて

1

XAMLが鳴っているように見えます。投稿したコードが問題を引き起こすことはありません。ロードされたデータが正しいことを確認しましたか?あなたは実際に各学生のために同じ主題データを読み込んでいるかもしれません。 あなたが簡単にあなたのウィンドウ上のボタンのクリックイベントにこのコードを置くことによって確認することができます。

IEnumerable<Student> list = (IEnumerable<Student>)this.DataContext; 
foreach(Student stu in Students) 
{ 
    Debug.WriteLine(stu.StudentID + ":"); 
    foreach(Subject sub in stu.Subjects) 
    { 
     Debug.WriteLine("\\t" + sub.SubjectID) 
    } 
} 
+0

はいロードされたデータは正しいです。 –