This question is locked. New answers and comments are not allowed.
Hello i want to bind RadGrid by DataTable. My Wcf Service Convert DataTable to Xml String and my SL application gets Xml string and binds with the methods that I wrote below. i can bind grid very well. but when i click column header to sort or click filter pop up menu button or grouping event, application crash and give below error.
How can i solve these problems
Thanks
Omer Emre AKTEPE
Software Engineer
(Note: Sayi is my datatable column name)
Error:
| Message: Sys.InvalidOperationException: ManagedRuntimeError error #4004 in control 'Silverlight1': System.ArgumentException: Invalid property or field - 'Sayi' for type: XElement |
| at Telerik.Windows.Data.Expressions.MemberAccessTokenExtensions.CreateMemberAccessExpression(IMemberAccessToken token, Expression instance) |
| at Telerik.Windows.Data.Expressions.ExpressionFactory.MakeMemberAccess(Expression instance, String memberName) |
| at Telerik.Windows.Data.Expressions.ExpressionFactory.MakeMemberAccess(Expression instance, String memberName, Boolean liftMemberAccessToNull) |
| at Telerik.Windows.Data.Expressions.PropertyAccessExpressionBuilder.CreateMemberAccessExpression() |
| at Telerik.Windows.Data.Expressions.MemberAccessExpressionBuilderBase.CreateLambdaExpression() |
| at Telerik.Windows.Data.Expressions.GroupDescriptorExpressionBuilder.CreateGroupByExpression() |
| at Telerik.Windows.Data.Expressions.GroupDescriptorExpressionBuilderBase.CreateQuery() |
| at Telerik.Windows.Data.Expressions.GroupDescriptorCollectionExpressionBuilder.CreateQuery() |
| at Telerik.Windows.Data.QueryableExtensions.GroupBy(IQueryable source, GroupDescriptorCollection groupDescriptors) |
| at Telerik.Windows.Data.QueryableCollectionView.CreateView() |
| at Telerik.Windows.Data.QueryableCollectionView.get_QueryableView() |
| at Telerik.Windows.Data.QueryableCollectionView.CreateInternalList() |
| at Telerik.Windows.Data.QueryableCollectionView.get_InternalList() |
| at Telerik.Windows.Data.QueryableCollectionView.GetEnumerator() |
| at Telerik.Windows.Data.RecordFactory.<CreateRecordsForGroupRecord>d__0.MoveNext() |
| at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) |
| at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source) |
| at Telerik.Windows.Controls.GridView.GridViewDataControl.PopulateRecords() |
| at Telerik.Windows.Controls.GridView.GridViewDataControl.LoadData() |
| at Telerik.Windows.Controls.GridView.GridViewDataControl.OnCollectionViewCollectionChanged(Object sender, NotifyCollectionChangedEventArgs e) |
| at System.Collections.Specialized.NotifyCollectionChangedEventHandler.Invoke(Object sender, NotifyCollectionChangedEventArgs e) |
| at Telerik.Windows.Data.QueryableCollectionView.OnCollectionChanged(NotifyCollectionChangedEventArgs args) |
| at Telerik.Windows.Data.QueryableCollectionView.RefreshAndRaiseCollectionChanged(NotifyCollectionChangedEventArgs args) |
| at Telerik.Windows.Data.QueryableCollectionView.Refresh() |
| at Telerik.Windows.Data.QueryableCollectionView.EndDefer() |
| at Telerik.Windows.Data.QueryableCollectionView.DeferHelper.Dispose() |
| at Telerik.Windows.Controls.GridView.GridViewDataControl.PerformGrouping(String member, Object displayContent, Nullable`1 insertionIndex) |
| at Telerik.Windows.Controls.GridView.GridViewDataControl.<>c__DisplayClass2a.<GroupingRequested>b__29() |
| at Telerik.Windows.Controls.CursorManager.PerformTimeConsumingOperation(FrameworkElement frameworkElement, Action action) |
| at Telerik.Windows.Controls.GridView.GridViewDataControl.GroupingRequested(Object origin, GroupingRequestedEventArgs e) |
MyBind Method
| public static bool Bind(Telerik.Windows.Controls.RadGridView grd, string DataTable) | |
| { | |
| XDocument xd = XDocument.Parse(DataTable); | |
| if (xd.Root != null) | |
| { | |
| IEnumerable<XElement> nds = (xd.Root.FirstNode as XElement).Elements(); | |
| XMLConverter cnv = new XMLConverter(); | |
| foreach (XElement node in nds) | |
| { | |
| GridViewDataColumn clmn = new GridViewDataColumn(); | |
| Binding bnd = new Binding(); | |
| bnd.ConverterParameter = node.Name.LocalName; | |
| bnd.Converter = cnv; | |
| clmn.DataMemberBinding = bnd; | |
| clmn.IsReadOnly = true; | |
| clmn.UniqueName = node.Name.LocalName; | |
| clmn.DataType = typeof(System.String); | |
| grd.Columns.Add(clmn); | |
| } | |
| var query = | |
| (from el in xd.Elements("DocumentElement") | |
| from el1 in el.Elements("Tablo") | |
| select el1).ToList(); | |
| grd.AutoGenerateColumns = false; | |
| grd.ItemsSource = query; | |
| return true; | |
| } | |
| return false; | |
| } |
Binding.Converter
| public class XMLConverter : IValueConverter | |
| { | |
| public object Convert(object value, Type targetType object parameter, CultureInfo culture) | |
| { | |
| if (value is XElement) | |
| { | |
| XElement row = value as XElement; | |
| string index = parameter as string; | |
| return row.Element(index).Value; | |
| } | |
| return null; | |
| } | |
| public object ConvertBack(object value, Type targetType, | |
| object parameter, CultureInfo culture) | |
| { | |
| throw new NotImplementedException(); | |
| } | |
| } |