Hi,
I got one problem of RadGridView with Hierarchy gridview structure.
Configuration:
WPF app for .NET Framework 4
Windows 7 (x64) Professional
Telerik Version: RadControls for WPF Q2 2011 SP1(2011.2.0920)
I show the data to user using the following hierarchy:
RadGridView (Level 1)
+---- RadGridView (Level 2)
+-------------- RadGridView (Level 3)
It works fine in normal data databinding. Three level of gridvews can be shown.
i.e.
When i add a converter in binding in Level 3 grid, during runtime it shows only the Level 1 grid (the topmost one) with "+" that's not expandable. If i add a converter in binding in Level 1 and Level 2 grid, it also works fine. Three levels expandable grid could be shown.
i.e.
my xaml code for gridview.
<telerik:RadGridView ShowGroupPanel="False" x:Name="rgvInvoiceList" ItemsSource="{Binding InvoiceList, Mode=OneWay}" IsReadOnly="True">
<telerik:RadGridView.ChildTableDefinitions>
<telerik:GridViewTableDefinition/>
</telerik:RadGridView.ChildTableDefinitions>
<telerik:RadGridView.Columns>
<telerik:GridViewDataColumn Header="Invoice No" DataMemberBinding="{Binding Invoice_No}">
<telerik:GridViewDataColumn.CellTemplate>
<DataTemplate>
<TextBlock>
<Hyperlink Click="InvoiceNo_Click">
<TextBlock Text="{Binding Invoice_No}" ></TextBlock>
</Hyperlink>
</TextBlock>
</DataTemplate>
</telerik:GridViewDataColumn.CellTemplate>
</telerik:GridViewDataColumn>
<telerik:GridViewDataColumn DataMemberBinding="{Binding Invoice_Date, Converter={StaticResource stringFormat},
ConverterCulture={x:Static glob:CultureInfo.CurrentCulture}, ConverterParameter={}{0:d}}"
Header="Date" MinWidth="60" ></telerik:GridViewDataColumn>
<telerik:GridViewDataColumn Header="Bill To" Width="*" DataMemberBinding="{Binding Bill_To_Name}">
<telerik:GridViewDataColumn.CellTemplate>
<DataTemplate>
<TextBlock>
<Hyperlink Click="BillToName_Click">
<TextBlock Text="{Binding Bill_To_Name}" ></TextBlock>
</Hyperlink>
</TextBlock>
</DataTemplate>
</telerik:GridViewDataColumn.CellTemplate>
</telerik:GridViewDataColumn>
<telerik:GridViewDataColumn Header="Pay To" DataMemberBinding="{Binding Pay_To_Type}"/>
<telerik:GridViewDataColumn Header="Status" DataMemberBinding="{Binding Invoice_Status_Text}" />
<telerik:GridViewDataColumn DataMemberBinding="{Binding Invoice_Total, Converter={StaticResource stringFormat},
ConverterCulture={x:Static glob:CultureInfo.CurrentCulture}, ConverterParameter={}{0:C}}"
Header="Amount" TextAlignment="Right" Width="Auto" HeaderTextAlignment="Right">
</telerik:GridViewDataColumn>
</telerik:RadGridView.Columns>
<telerik:RadGridView.HierarchyChildTemplate>
<DataTemplate>
<!-- Invoice Detail Level -->
<telerik:RadGridView ShowColumnHeaders="False" ShowGroupPanel="False" ItemsSource="{Binding Invoice_Detail, Mode=OneWay}" AutoGenerateColumns="False"
IsReadOnly="True" >
<telerik:RadGridView.ChildTableDefinitions>
<telerik:GridViewTableDefinition/>
</telerik:RadGridView.ChildTableDefinitions>
<telerik:RadGridView.Columns>
<telerik:GridViewDataColumn DataMemberBinding="{Binding Cost_Centre_Name_Display}"
Header="Cost Centre" Width="Auto"></telerik:GridViewDataColumn>
<telerik:GridViewDataColumn DataMemberBinding="{Binding Account_Code_Name_Internal_Display}"
Header="Account" Width="Auto"></telerik:GridViewDataColumn>
<telerik:GridViewDataColumn DataMemberBinding="{Binding Period_From, Converter={StaticResource stringFormat},
ConverterCulture={x:Static glob:CultureInfo.CurrentCulture}, ConverterParameter={}{0:d}}"
Header="Period From" TextAlignment="Right" HeaderTextAlignment="Right" MinWidth="60">
</telerik:GridViewDataColumn>
<telerik:GridViewDataColumn DataMemberBinding="{Binding Period_To, Converter={StaticResource stringFormat},
ConverterCulture={x:Static glob:CultureInfo.CurrentCulture}, ConverterParameter={}{0:d}}"
Header="Period To" TextAlignment="Right" HeaderTextAlignment="Right" MinWidth="60"></telerik:GridViewDataColumn>
<telerik:GridViewDataColumn DataMemberBinding="{Binding Description}" Header="Description" Style="{StaticResource GridViewDataColumnStyle_Description}">
</telerik:GridViewDataColumn>
<telerik:GridViewDataColumn DataMemberBinding="{Binding Invoice_Amount, Converter={StaticResource stringFormat},
ConverterCulture={x:Static glob:CultureInfo.CurrentCulture}, ConverterParameter={}{0:C}}"
Header="Amount" TextAlignment="Right" Width="Auto" HeaderTextAlignment="Right">
</telerik:GridViewDataColumn>
</telerik:RadGridView.Columns>
<!-- Invoice Allocation Level -->
<telerik:RadGridView.HierarchyChildTemplate>
<DataTemplate>
<telerik:RadGridView ShowColumnHeaders="False" ShowGroupPanel="False" ItemsSource="{Binding Invoice_Allocation, Mode=OneWay}" AutoGenerateColumns="False"
IsReadOnly="True">
<telerik:RadGridView.Columns>
<telerik:GridViewDataColumn Header="Receipt No/Credit Note No" TextAlignment="Right" Width="Auto" HeaderTextAlignment="Right"
DataMemberBinding="{Binding Receipt_Credit_Note_No}" >
<telerik:GridViewDataColumn.CellTemplate>
<DataTemplate>
<TextBlock>
<Hyperlink Click="ReceiptNoCreditNo_Click">
<TextBlock Text="{Binding Receipt_Credit_Note_No}" ></TextBlock>
</Hyperlink>
</TextBlock>
</DataTemplate>
</telerik:GridViewDataColumn.CellTemplate>
</telerik:GridViewDataColumn>
<!--<telerik:GridViewDataColumn DataMemberBinding="{Binding Cutoff_Date, Converter={StaticResource stringFormat},
ConverterCulture={x:Static glob:CultureInfo.CurrentCulture}, ConverterParameter={}{0:d}}"
Header="Cutoff Date" TextAlignment="Right" HeaderTextAlignment="Right" MinWidth="60">
</telerik:GridViewDataColumn>-->
<telerik:GridViewDataColumn DataMemberBinding="{Binding Cutoff_Date}"
Header="Cutoff Date" TextAlignment="Right" HeaderTextAlignment="Right" MinWidth="60">
</telerik:GridViewDataColumn>
<!--<telerik:GridViewDataColumn DataMemberBinding="{Binding Allocation_Amount, Converter={StaticResource stringFormat},
ConverterCulture={x:Static glob:CultureInfo.CurrentCulture}, ConverterParameter={}{0:C}}"
Header="Amount" TextAlignment="Right" Width="Auto" HeaderTextAlignment="Right">
</telerik:GridViewDataColumn>-->
<telerik:GridViewDataColumn DataMemberBinding="{Binding Allocation_Amount}"
Header="Amount" TextAlignment="Right" Width="Auto" HeaderTextAlignment="Right">
</telerik:GridViewDataColumn>
</telerik:RadGridView.Columns>
</telerik:RadGridView>
</DataTemplate>
</telerik:RadGridView.HierarchyChildTemplate>
</telerik:RadGridView>
</DataTemplate>
</telerik:RadGridView.HierarchyChildTemplate>
</telerik:RadGridView>
If i use a debugger it shows that i have exception: NullReferenceException that's throwed from GridViewRow.OnIsExpandedChanged.
The error message.
Sysem.NullReferenceException :
{"Object reference not set to an instance of an object"}
Data:
System.Collections.ListDictionaryInternal
StackTrace:
at DataSwiftWPF.Views.Invoice.InvoiceListWindow.System.Windows.Markup.IStyleConnector.Connect(Int32 connectionId, Object target) in f:\Stephen Chow\Project\DataSwiftV3\DataSwiftWPF\Views\Invoice\InvoiceListWindow.xaml:line 110
at System.Windows.FrameworkTemplate.LoadTemplateXaml(XamlReader templateReader, XamlObjectWriter currentWriter)
at System.Windows.FrameworkTemplate.LoadTemplateXaml(XamlObjectWriter objectWriter)
at System.Windows.FrameworkTemplate.LoadOptimizedTemplateContent(DependencyObject container, IComponentConnector componentConnector, IStyleConnector styleConnector, List`1 affectedChildren, UncommonField`1 templatedNonFeChildrenField)
at System.Windows.FrameworkTemplate.LoadContent(DependencyObject container, List`1 affectedChildren)
at System.Windows.FrameworkTemplate.LoadContent()
at Telerik.Windows.Controls.GridView.GridViewRow.PopulateHierarchyContent() in c:\TB\102\WPF_Scrum\Release_WPF\Sources\Development\Controls\GridView\GridView\GridView\Rows\GridViewRow.cs:line 304
at Telerik.Windows.Controls.GridView.GridViewRow.OnIsExpandedChanged(Boolean oldValue, Boolean newValue) in c:\TB\102\WPF_Scrum\Release_WPF\Sources\Development\Controls\GridView\GridView\GridView\Rows\GridViewRow.cs:line 230
at Telerik.Windows.Controls.GridView.GridViewRow.OnIsExpandedChanged(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs e) in c:\TB\102\WPF_Scrum\Release_WPF\Sources\Development\Controls\GridView\GridView\GridView\Rows\GridViewRow.cs:line 205
at System.Windows.DependencyObject.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
at System.Windows.FrameworkElement.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
at System.Windows.DependencyObject.NotifyPropertyChange(DependencyPropertyChangedEventArgs args)
at System.Windows.DependencyObject.UpdateEffectiveValue(EntryIndex entryIndex, DependencyProperty dp, PropertyMetadata metadata, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType)
at System.Windows.DependencyObject.SetValueCommon(DependencyProperty dp, Object value, PropertyMetadata metadata, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType, Boolean isInternal)
at System.Windows.DependencyObject.SetValue(DependencyProperty dp, Object value)
at MS.Internal.Data.PropertyPathWorker.SetValue(Object item, Object value)
at MS.Internal.Data.ClrBindingWorker.UpdateValue(Object value)
at System.Windows.Data.BindingExpression.UpdateSource(Object value)
TargetSite:
{Void System.Windows.Markup.IStyleConnector.Connect(Int32, System.Object)}
I found a thread that is talking a similar scenario. And you reply that the problem could be fixed by getting the latest version of build.
But it seems that it does not work in my scenario.
http://www.telerik.com/community/forums/wpf/gridview/nullreferenceexception-in-gridviewrow-onisexpandedchanged.aspx
Any suggestion for my scenario?
Regards,
Stephen Chow