This is a migrated thread and some comments may be shown as answers.

Hierarchical Data Grid Child Problem

3 Answers 144 Views
GridView
This is a migrated thread and some comments may be shown as answers.
Leo
Top achievements
Rank 2
Leo asked on 02 Dec 2010, 04:45 PM
<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>

Here's my 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;
        }
    }


Hi I have no problem on loading the child data related to its parent source. The problem is that if I try to expand another row it loads the first data for it. Example is if I have row1 expanded it displays the correct child table but if I go to row2 and expand it, its child records are for row1. I tried looking for the answer and putting the parent_IsExpandedChanged event to handle it but still it wont display the correct data. If I try to reload the application again and try to expand row 2 or row 3. its child is correct but if i expanded another row it will display the child for row 2 or row 3. Please help what am i doing wrong

3 Answers, 1 is accepted

Sort by
0
Leo
Top achievements
Rank 2
answered on 02 Dec 2010, 09:22 PM
parentRow.IsExpandedChanged+=new RoutedEventHandler(parentRow_IsExpandedChanged);
        }
         }
 
    void parentRow_IsExpandedChanged(object sender, RoutedEventArgs e)
    {
        rgvData.SelectedItem = ((GridViewRow)sender).DataContext;
        rgvData.ExpandAllHierarchyItems();
    }


I added a breakpoint on parentRow.IsExpandedChanged event and it hits the break point but I also added a breakpoint on rgvData.SelectedItem = ((GridViewRow)sender).DataContext; and it's not hitting the breakpoint. Meaning IsExpandedChanged is hit but the method is not called.
0
Leo
Top achievements
Rank 2
answered on 04 Dec 2010, 05:10 PM
Help please. Been trying to figure out this for weeks.
0
Maya
Telerik team
answered on 06 Dec 2010, 08:23 AM
Hello Leo,

I have tried to reproduce the issue you described, but I was not able to. I am sending you the sample project I used for testing it. Please take a look at it and let me know in case of any misunderstandings. Feel free to change it in the way you need and send it back if necessary.
Furthermore, may you try to add a handler to the parent grid for the IsExpandedChanged event as demonstrated in the sample ?
 

Best wishes,
Maya
the Telerik team
Browse the videos here>> to help you get started with RadControls for WPF
Tags
GridView
Asked by
Leo
Top achievements
Rank 2
Answers by
Leo
Top achievements
Rank 2
Maya
Telerik team
Share this question
or