2010-12-02 3 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.CsHierarchical Data Grid по уходу за детьми

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, он отображает правильную дочернюю таблицу, но если я перейду к строке2 и расширю его, его дочерние записи будут для строки1. Я пробовал искать ответ и помещал родительское_IsExpandedChanged событие, чтобы обработать его, но все же он не будет отображать правильные данные. Если я снова попытаюсь перезагрузить приложение и попытаюсь развернуть строку 2 или строку 3. его дочерний элемент правильный, но если я развернул еще одну строку, он отобразит дочернего элемента для строки 2 или строки 3. Помогите, что я делаю неправильно

+0

любая помощь, пожалуйста, – 2010-12-04 15:59:25

+0

им с помощью LINQ к классу SQL в получении данных из SQL – 2010-12-04 19:14:03

ответ

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) 
    } 
} 
Смежные вопросы