Casting var into RadTreeViewItem

5 posts, 0 answers
  1. Srikrishna
    Srikrishna avatar
    18 posts
    Member since:
    Apr 2012

    Posted 28 Jun 2012 Link to this post


    Hi Telerik,

    I am using RadTreeView in my application. I am getting the RadTreeView Items dynamically from the database in this way:
    LoadOperation<tblRole> LoadRole = this.context.Load(this.context.GetRoleQuery());
    TreeView_Role.ItemsSource = LoadRole.Entities;
    LoadRole.Completed += new EventHandler(LoadRole_Completed);

     

    When i try to iterate through the RadTreeViewItems and cast var into RadTreeViewItem as shown below, it is always showing null.
    void LoadRole_Completed(object sender, EventArgs e)
          {
              foreach (object ob in TreeView_Role.Items)
              {
                  RadTreeViewItem ritem = TreeView_Role.ContainerFromItemRecursive(ob);
              }  
          }

    Please help me solve this Issue. Thanks in Advance.
  2. Tina Stancheva
    Admin
    Tina Stancheva avatar
    3298 posts

    Posted 28 Jun 2012 Link to this post

    Hi Srikrishna,

    This behavior is expected as the RadTreeView control hasn't generated its RadTreeViewItem containers at this point. Basically in order to get the containers of type RadTreeViewItem that wrap teh business colelction, yo uneed to make sure that they are already generated.

    For example you can handle the RadTreeView.ItemContainerGenerator.StatusChanged event handler to make sure that the containers are generated before traversing the Items collection:
       TreeView_Role.ItemContainerGenerator.StatusChanged += new EventHandler(ItemContainerGenerator_StatusChanged);
    ...
            void ItemContainerGenerator_StatusChanged(object sender, EventArgs e)
            {
                if ((sender as Telerik.Windows.Controls.ItemContainerGenerator).Status == Telerik.Windows.Controls.Primitives.GeneratorStatus.ContainersGenerated)
                {
                    //traverse the RadTreeView.Items collection
                }
            }

    If you give us more details about your scenario and application, we will eb able to suggest more suitable approaches.

    Greetings,
    Tina Stancheva
    the Telerik team

    Explore the entire Telerik portfolio by downloading the Ultimate Collection trial package. Get it now >>

  3. DevCraft banner
  4. Srikrishna
    Srikrishna avatar
    18 posts
    Member since:
    Apr 2012

    Posted 28 Jun 2012 Link to this post


    Thanks Tina for the reply. I am now able to access my TreeViewItems.

    I have another question regarding telerik RadGridview. I have a gridviewdatacolumn which is binded to a checkbox as below:
    <telerik:RadWindow.Resources>
           <DataTemplate x:Key="BindBUName">
               <StackPanel Orientation="Horizontal">
                   <CheckBox Content="{Binding sgBusinessUnitName, Mode=TwoWay}"></CheckBox>
               </StackPanel>
           </DataTemplate>
    </telerik:RadWindow.Resources>
    <telerik:RadGridView x:Name="TelGV_BusinessUnit" SelectionMode="Multiple" AutoGenerateColumns="False" Margin="20,0,0,0" Height="477" Width="420">
                               <telerik:RadGridView.Columns>
                                   <telerik:GridViewDataColumn x:Name="ColumnBUgroup" Header="Business Unit Group" CellTemplate="{StaticResource BindBUName}" CellTemplateSelector=""></telerik:GridViewDataColumn>
                               </telerik:RadGridView.Columns>
                           </telerik:RadGridView>

    My requirement is when user checks the checkbox the row also should be selected so that i can access the selected items in code behind. How can i achieve this?

    Thanks.

  5. Lancelot
    Lancelot avatar
    251 posts
    Member since:
    Jul 2012

    Posted 02 Jul 2012 Link to this post

    Hi Srikrishna,

    You can accomplish this through the SelectionChanged event. This documentation will show you the Selection events of the RadGridView. Notice in the top section it describes that the SelectionChanged event will select the entire row.

    In the constructor of the page create the SelectionChanged event handler and then for the CheckBox create a click event. You'd want to do a simple 

    if(myCheckBox == IsChecked)
    {
         SelectionChanged();
    }

    before continuing. Then use the if statement to do what you want to the row's items, this is especially true if you are already using the SelectionChanged event for other methods. Just run what you want inside the if statement, like this:

    private void SelectionChanged(object sender, SelectionChangeEventArgs e )
    {
        if(myCheckBox == IsChecked)
    {
          Run your checkbox specific code in here
    }  
    }


    I hope this helps you 

    Good Luck,
    Lancelot
  6. Srikrishna
    Srikrishna avatar
    18 posts
    Member since:
    Apr 2012

    Posted 04 Jul 2012 Link to this post


    Hi Lancelot,

    I tried by the way you suggested. But it didn't work. The checked or click event is not raised when the item is checked as iam dynamically binding the items into treeview.
    Below is my code for RadGridView:
    Am i doing something wrong here?
    <telerik:RadWindow.Resources>
            <DataTemplate x:Key="BindBUName">
                <StackPanel Orientation="Horizontal">
                    <CheckBox x:Name="cbBUname" Content="{Binding sgBusinessUnitName}"></CheckBox>
                </StackPanel>
            </DataTemplate>
     </telerik:RadWindow.Resources>
     
     <telerik:RadGridView x:Name="TelGV_BusinessUnit" SelectionMode="Multiple" AutoGenerateColumns="False" IsReadOnly="True" Margin="20,0,0,0" Height="457" Width="420">
                                <telerik:RadGridView.Columns>
                                    <telerik:GridViewDataColumn x:Name="ColumnBUgroup" Header="Business Unit Group" CellTemplate="{StaticResource BindBUName}"></telerik:GridViewDataColumn>
                                    <telerik:GridViewDataColumn x:Name="ColumnBU" Header="Business Unit" CellTemplate="{StaticResource BindBUName}"></telerik:GridViewDataColumn>
                                </telerik:RadGridView.Columns>
    </telerik:RadGridView>
Back to Top
DevCraft banner