Hi
I am trying to sort a Int32 column and it fails if any cell in the column is changed (Same for Group Panel). If I sort the column without cell changes no problem. I tried both creating the columns in xaml and in code with not difference. Also i am binding to an array of object. I also tried both Array and List. Also, the columns that are String sort properly when a cell is changed in the column. Am i missing something?
The code is as follows.
1. Create data class
2. View Model class
3. Main Page code behind
4. Xaml
Thanks
Rich
I am trying to sort a Int32 column and it fails if any cell in the column is changed (Same for Group Panel). If I sort the column without cell changes no problem. I tried both creating the columns in xaml and in code with not difference. Also i am binding to an array of object. I also tried both Array and List. Also, the columns that are String sort properly when a cell is changed in the column. Am i missing something?
The code is as follows.
1. Create data class
2. View Model class
3. Main Page code behind
4. Xaml
Thanks
Rich
using System.Collections.ObjectModel;
using System.Collections.Generic;
using System;
namespace RadGridView_SL4_AR_25
{
public class CRow
{
private List<
object
> _Columns = new List<
object
>();
public List<
object
> Columns
{
get { return _Columns; }
set { _Columns = value;}
}
public static ObservableCollection<
CRow
> GetRows()
{
ObservableCollection<
CRow
> rows = new ObservableCollection<
CRow
>();
CRow row;
List<
object
> columns = new List<
object
>();
columns.Add("Lawrence Taylor");
columns.Add("7230 Surfbird Lane");
columns.Add("San Diego");
columns.Add("CA");
columns.Add(92011);
row = new CRow() { Columns = columns };
rows.Add(row);
columns = new List<
object
>();
columns.Add("Phil Simms");
columns.Add("1800 Quarteback Way");
columns.Add("New York");
columns.Add("NY");
columns.Add(73418);
row = new CRow() { Columns = columns };
rows.Add(row);
columns = new List<
object
>();
columns.Add("Mark Bavaro");
columns.Add("412 End Lane");
columns.Add("Philadelphia");
columns.Add("PA");
columns.Add(45722);
row = new CRow() { Columns = columns };
rows.Add(row);
return rows;
}
}
public class ColumnMetadata
{
string _UniqueName;
public string UniqueName
{
get { return _UniqueName; }
set { _UniqueName = value; }
}
string _Header;
public string Header
{
get { return _Header; }
set { _Header = value; }
}
string _DataType;
public string DataType
{
get { return _DataType; }
set { _DataType = value; }
}
public static ObservableCollection<
ColumnMetadata
> GetColumnMetadata()
{
ObservableCollection<
ColumnMetadata
> cols = new ObservableCollection<
ColumnMetadata
>();
ColumnMetadata columnMetadata = new ColumnMetadata();
columnMetadata.UniqueName = "Customer_Name";
columnMetadata.Header = "Name";
columnMetadata.DataType = "System.String";
cols.Add(columnMetadata);
columnMetadata = new ColumnMetadata();
columnMetadata.UniqueName = "Customer_Street";
columnMetadata.Header = "Street";
columnMetadata.DataType = "System.String";
cols.Add(columnMetadata);
columnMetadata = new ColumnMetadata();
columnMetadata.UniqueName = "Customer_City";
columnMetadata.Header = "City";
columnMetadata.DataType = "System.String";
cols.Add(columnMetadata);
columnMetadata = new ColumnMetadata();
columnMetadata.UniqueName = "Customer_State";
columnMetadata.Header = "State";
columnMetadata.DataType = "System.String";
cols.Add(columnMetadata);
columnMetadata = new ColumnMetadata();
columnMetadata.UniqueName = "Customer_ZipCode";
columnMetadata.Header = "Zip Code";
columnMetadata.DataType = "System.Int32";
cols.Add(columnMetadata);
return cols;
}
}
}
using System.ComponentModel;
using System.Collections.ObjectModel;
namespace RadGridView_SL4_AR_25
{
public class MyViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private ObservableCollection<
CRow
> _GridItems;
public ObservableCollection<
CRow
> GridItems
{
get
{
return CRow.GetRows();
}
set
{
_GridItems = value;
OnPropertyChanged("GridItems");
}
}
protected virtual void OnPropertyChanged(PropertyChangedEventArgs args)
{
PropertyChangedEventHandler handler = this.PropertyChanged;
if (handler != null)
{
handler(this, args);
}
}
private void OnPropertyChanged(string propertyName)
{
this.OnPropertyChanged(new PropertyChangedEventArgs(propertyName));
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Telerik.Windows.Controls;
using Telerik.Windows.Data;
using System.Collections.ObjectModel;
using System.Windows.Data;
namespace RadGridView_SL4_AR_25
{
public partial class MainPage : UserControl
{
public MainPage()
{
InitializeComponent();
}
private void myGrid_Loaded(object sender, RoutedEventArgs e)
{
ObservableCollection<
ColumnMetadata
> columns = ColumnMetadata.GetColumnMetadata();
for (int i = 0; i < columns.Count; i++)
{
myGrid.Columns.Add(new GridViewDataColumn()
{
Header = columns[i].Header,
UniqueName = columns[i].UniqueName,
DataMemberBinding = new Binding("Columns[" + i + "]") { Mode = BindingMode.TwoWay },
DataType = Type.GetType(columns[i].DataType)
});
}
}
}
}
<
UserControl
x:Class
=
"RadGridView_SL4_AR_25.MainPage"
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
=
"*"
/>
<
RowDefinition
Height
=
"Auto"
/>
<
RowDefinition
Height
=
"Auto"
/>
</
Grid.RowDefinitions
>
<
telerik:RadGridView
Name
=
"myGrid"
Grid.Row
=
"0"
ItemsSource
=
"{Binding GridItems, Mode=TwoWay}"
CanUserSortColumns
=
"True"
ShowGroupPanel
=
"True"
Loaded
=
"myGrid_Loaded"
AutoGenerateColumns
=
"False"
>
</
telerik:RadGridView
>
</
Grid
>
</
UserControl
>