How-To create RadGridView.RowDetailsTemplate programatically

6 posts, 0 answers
  1. Richard Harrigan
    Richard Harrigan avatar
    235 posts
    Member since:
    Nov 2009

    Posted 30 Dec 2011 Link to this post

    Hi,

    I would like to dynamically build a DataTemplate and am looking for help on how to do it.

    I tried and failed with the following:

    I loaded a working DataTemplates xaml into a string.

    <DataTemplate>
        -----
        -----
        -----
    </DataTemplate>

    I executed the following and got this error
    No default namespace has been declared Line 1 Pos 14

    String xaml = GetXaml();         // A function that I wrote that created the string
    DataTemplate dt = (DataTemplate)XamlReader.Load(xaml);  // Failed on this line
    myGrid.RowDetailsTemplate = dt;

    Can you please set me straight on how to do this.

    Thanks
    Rich

  2. Richard Harrigan
    Richard Harrigan avatar
    235 posts
    Member since:
    Nov 2009

    Posted 31 Dec 2011 Link to this post

    Hi,

    I elimated the namespace error message by adding xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  to the DataTemplate tag.

    I then crashed on a 4004.... See screen shot
  3. Nick
    Admin
    Nick avatar
    593 posts

    Posted 02 Jan 2012 Link to this post

    Hello Richard,

    Based on the information that you provided there is no way to be certain about what is going wrong. However if you are using any other namespaces in the template you will probably have to add them too. I.e. if you are using telerik:RadButton, you have to add xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation" 
    to the DataTemplate tag. Does this work for you? if not, would it be possible to provide more detailed information about the project? 

    All the best,
    Nik
    the Telerik team

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

  4. Richard Harrigan
    Richard Harrigan avatar
    235 posts
    Member since:
    Nov 2009

    Posted 02 Jan 2012 Link to this post

    Hi Nik

    The following is the original Xaml with  <telerik.RadGridView.RowDetailsTemplate> commented out. It is followed by the dynamic Xaml that was generated.  I loaded the DataTemplate as follows:

    myGrid RowDetailsTemplate = (DataTemplate)XanlReader.Load(xaml);

    I added all the namespaces from the original Xaml. Am I adding the dynamic xaml to the RadGridView properly?  I have no idea what to do next and am hoping that if you don't see something obvious you could create a very simple example of dynamically creating a RowDetailsTemplate.  The reason I need this is that I am trying to build a adhoc query builder where the end-user could specify how the grid should be rendered.

    <UserControl x:Class="RadGridView_SL4_AR_25.MainPage"
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                 xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
                 xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation"
                 xmlns:my="clr-namespace:RadGridView_SL4_AR_25"
                 xmlns:telerikQuickStart="clr-namespace:Telerik.Windows.Controls.QuickStart;assembly=Telerik.Windows.Controls"
                 mc:Ignorable="d"
                 d:DesignHeight="700"
                 d:DesignWidth="700">
     
        <UserControl.Resources>
            <my:MyViewModel x:Key="MyViewModel" />
        </UserControl.Resources>
     
        <Grid x:Name="LayoutRoot"
              Background="White"
              DataContext="{StaticResource MyViewModel}">
             
             
            <Grid.RowDefinitions>
                <RowDefinition Height="*" />
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*" />
                <ColumnDefinition Width="350" />
            </Grid.ColumnDefinitions>
     
            <telerik:RadGridView Name="myGrid"
                                 ItemsSource="{Binding GridItems, Mode=TwoWay}"
                                 SelectionChanged="myGrid_SelectionChanged"
                                 IsSynchronizedWithCurrentItem="True"
                                 RowIndicatorVisibility="Visible"
                                 RowDetailsVisibilityMode="VisibleWhenSelected"
                                 CanUserSortColumns="True"
                                 IsReadOnly="True"
                                 ShowGroupPanel="True"
                                 Loaded="myGrid_Loaded"
                                 AutoGenerateColumns="False">
    <!--
                <telerik:RadGridView.RowDetailsTemplate>        
                    <DataTemplate>
                         
                        <Grid Width="Auto"
                              HorizontalAlignment="Stretch">
                            <Grid.RowDefinitions>
                                <RowDefinition />
                                <RowDefinition />
                                <RowDefinition />
                                <RowDefinition />
                                <RowDefinition />
                            </Grid.RowDefinitions>
     
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="Auto" />
                                <ColumnDefinition Width="Auto" />
                            </Grid.ColumnDefinitions>
     
                            <TextBlock Text="Name: "
                                       Margin="75,10,0,0"
                                       FontWeight="Bold"
                                       FontSize="14"
                                       Grid.Row="0"
                                       Grid.Column="0" />
                            <TextBlock Text="{Binding Columns[0]}"
                                       Margin="5,10,0,0"
                                       FontSize="14"
                                       Grid.Row="0"
                                       Grid.Column="1" />
                             
                            <TextBlock Text="Street: "
                                       Margin="75,0,0,0"
                                       FontWeight="Bold"
                                       FontSize="14"
                                       Grid.Row="1"
                                       Grid.Column="0" />
                            <TextBlock Text="{Binding Columns[1]}"
                                       Margin="5,0,0,0"
                                       FontSize="14"
                                       Grid.Row="1"
                                       Grid.Column="1" />
                            <TextBlock Text="City: "
                                       Margin="75,0,0,0"
                                       FontWeight="Bold"
                                       FontSize="14"
                                       Grid.Row="2"
                                       Grid.Column="0" />
                            <TextBlock Text="{Binding Columns[2]}"
                                       Margin="5,0,0,0"
                                       FontSize="14"
                                       Grid.Row="2"
                                       Grid.Column="1" />
                            <TextBlock Text="State: "
                                       Margin="75,0,0,0"
                                       FontWeight="Bold"
                                       FontSize="14"
                                       Grid.Row="3"
                                       Grid.Column="0" />
                            <TextBlock Text="{Binding Columns[3]}"
                                       Margin="5,0,0,0"
                                       FontSize="14"
                                       Grid.Row="3"
                                       Grid.Column="3" />
                            <TextBlock Text="Zip Code: "
                                       Margin="75,0,0,0"
                                       FontWeight="Bold"
                                       FontSize="14"
                                       Grid.Row="4"
                                       Grid.Column="0" />
                            <TextBlock Text="{Binding Columns[4]}"
                                       Margin="5,0,0,10"
                                       FontSize="14"
                                       Grid.Row="4"
                                       Grid.Column="1" />
                             
                        </Grid>
                    </DataTemplate>
                     
                </telerik:RadGridView.RowDetailsTemplate>
                -->
                
            </telerik:RadGridView>
     
            <telerik:RadPropertyGrid x:Name="RadPropertyGrid1"
                                     Item="{Binding SelectedItem, ElementName=myGrid, Mode=TwoWay}"
                                     Margin="8"
                                     LabelColumnWidth="130"
                                     SearchBoxVisibility="Collapsed"
                                     Grid.Column="1"
                                     AutoGeneratePropertyDefinitions="False">
            </telerik:RadPropertyGrid>
        </Grid>
    </UserControl>

    Dynamically loaded Xaml:

    <DataTemplate xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation" xmlns:telerikQuickStart="clr-namespace:Telerik.Windows.Controls.QuickStart;assembly=Telerik.Windows.Controls" xmlns:my="clr-namespace:RadGridView_SL4_AR_25">
    - <Grid Width="Auto" HorizontalAlignment="Stretch">
    - <Grid.RowDefinitions>
    <RowDefinition />
    <RowDefinition />
    <RowDefinition />
    <RowDefinition />
    <RowDefinition />
    </Grid.RowDefinitions>
    - <Grid.ColumnDefinitions>
    <ColumnDefinition Width="Auto" />
    <ColumnDefinition Width="Auto" />
    </Grid.ColumnDefinitions>
    <TextBlock Text="Name:" Margin="75,10,0,0" FontWeight="Bold" FontSize="14" Grid.Row="0" Grid.Column="0" />
    <TextBlock Text="{Binding Columns[0]}" Margin="5,10,0,0" FontSize="14" Grid.Row="0" Grid.Column="1" />
    <TextBlock Text="Street:" Margin="75,10,0,0" FontWeight="Bold" FontSize="14" Grid.Row="1" Grid.Column="0" />
    <TextBlock Text="{Binding Columns[1]}" Margin="5,10,0,0" FontSize="14" Grid.Row="1" Grid.Column="1" />
    <TextBlock Text="City:" Margin="75,10,0,0" FontWeight="Bold" FontSize="14" Grid.Row="2" Grid.Column="0" />
    <TextBlock Text="{Binding Columns[2]}" Margin="5,10,0,0" FontSize="14" Grid.Row="2" Grid.Column="1" />
    <TextBlock Text="State:" Margin="75,10,0,0" FontWeight="Bold" FontSize="14" Grid.Row="3" Grid.Column="0" />
    <TextBlock Text="{Binding Columns[3]}" Margin="5,10,0,0" FontSize="14" Grid.Row="3" Grid.Column="1" />
    <TextBlock Text="Zip Code:" Margin="75,10,0,0" FontWeight="Bold" FontSize="14" Grid.Row="4" Grid.Column="0" />
    <TextBlock Text="{Binding Columns[4]}" Margin="5,10,0,10" FontSize="14" Grid.Row="4" Grid.Column="1" />
    </Grid>
    </DataTemplate>
  5. Nick
    Admin
    Nick avatar
    593 posts

    Posted 03 Jan 2012 Link to this post

    Hi Richard,

    I tried to reproduce the problem but I was actually unable to. Here is the code I used:

    private void radGridView_Loaded(object sender, RoutedEventArgs e)
            {
                this.radGridView.RowDetailsTemplate = (DataTemplate)XamlReader.Load(
     
    <Grid Width=""Auto"" HorizontalAlignment=""Stretch"">
     
    <Grid.RowDefinitions>
     
    <RowDefinition /> 
     
    <RowDefinition /> 
     
    <RowDefinition /> 
     
    <RowDefinition /> 
     
    <RowDefinition /> 
     
    </Grid.RowDefinitions>
     
    <Grid.ColumnDefinitions>
     
    <ColumnDefinition Width=""Auto"" />
     
    <ColumnDefinition Width=""Auto"" />
     
    </Grid.ColumnDefinitions>
     
    <TextBlock Text=""Name:"" Margin=""75,10,0,0"" FontWeight=""Bold"" FontSize=""14"" Grid.Row=""0"" Grid.Column=""0"" /> 
     
    <TextBlock Text=""{Binding Columns[0]}"" Margin=""5,10,0,0"" FontSize=""14"" Grid.Row=""0"" Grid.Column=""1"" /> 
     
    <TextBlock Text=""Street:"" Margin=""75,10,0,0"" FontWeight=""Bold"" FontSize=""14"" Grid.Row=""1"" Grid.Column=""0"" /> 
     
    <TextBlock Text=""{Binding Columns[1]}"" Margin=""5,10,0,0"" FontSize=""14"" Grid.Row=""1"" Grid.Column=""1"" /> 
     
    <TextBlock Text=""City:"" Margin=""75,10,0,0"" FontWeight=""Bold"" FontSize=""14"" Grid.Row=""2"" Grid.Column=""0"" /> 
     
    <TextBlock Text=""{Binding Columns[2]}"" Margin=""5,10,0,0"" FontSize=""14"" Grid.Row=""2"" Grid.Column=""1"" /> 
     
    <TextBlock Text=""State:"" Margin=""75,10,0,0"" FontWeight=""Bold"" FontSize=""14"" Grid.Row=""3"" Grid.Column=""0"" /> 
     
    <TextBlock Text=""{Binding Columns[3]}"" Margin=""5,10,0,0"" FontSize=""14"" Grid.Row=""3"" Grid.Column=""1"" /> 
     
    <TextBlock Text=""Zip Code:"" Margin=""75,10,0,0"" FontWeight=""Bold"" FontSize=""14"" Grid.Row=""4"" Grid.Column=""0"" /> 
     
    <TextBlock Text=""{Binding Columns[4]}"" Margin=""5,10,0,10"" FontSize=""14"" Grid.Row=""4"" Grid.Column=""1"" /> 
     
    </Grid>
     
    </DataTemplate>");
            }

    Are you sure that the formatting of the Xaml string you are trying to parse is correct? Could you try the snippet I sent you, and see if it works for you?
    Furthermore, I believe you may find more information on creating templates programmatically, in the MSDN and in StackOverflow.

    Hope this helps!

    Greetings,
    Nik
    the Telerik team

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

  6. Richard Harrigan
    Richard Harrigan avatar
    235 posts
    Member since:
    Nov 2009

    Posted 03 Jan 2012 Link to this post

    Hi Nik,

    That worked, outstanding.

    Thanks

    Rich

Back to Top