Hello!
I got a sample project from telerik team! (235440_loadrowdetails) for hierarchical datagrid.
Now I would like to know how to do this with dynamical data.
How do i have to implement the setter-Methods in MyViewModel?
XAML:
In my project I get my data in a background thread. And every time when data changes, my grid should update. Can you post me an "update-Method" for the telerik datagrid?
At the moment, I tried to do the following in my backgroundworker:
but this is not allowed.
Greetings
I got a sample project from telerik team! (235440_loadrowdetails) for hierarchical datagrid.
public
class
MyViewModel : INotifyPropertyChanged
{
public
event
PropertyChangedEventHandler PropertyChanged;
private
ObservableCollection<Club> clubs;
private
ObservableCollection<Player> players;
private
object
selectedItem;
public
ObservableCollection<Club> Clubs
{
get
{
if
(
this
.clubs ==
null
)
{
this
.clubs = Club.GetClubs();
}
return
this
.clubs;
}
}
public
ObservableCollection<Player> Players
{
get
{
if
(
this
.players ==
null
)
{
this
.players = Player.GetPlayers();
}
return
this
.players;
}
}
public
object
SelectedItem
{
get
{
return
this
.selectedItem; }
set
{
if
(value !=
this
.selectedItem)
{
this
.selectedItem = value;
this
.OnPropertyChanged(
"SelectedItem"
);
}
}
}
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));
}
}
}
namespace
LoadRowDetails
{
/// <summary>
/// A football club.
/// </summary>
public
class
Club : INotifyPropertyChanged
{
public
event
PropertyChangedEventHandler PropertyChanged;
private
string
name;
private
DateTime established;
private
int
stadiumCapacity;
private
ObservableCollection<Player> players;
public
string
Name
{
get
{
return
this
.name; }
set
{
if
(value !=
this
.name)
{
this
.name = value;
this
.OnPropertyChanged(
"Name"
);
}
}
}
public
DateTime Established
{
get
{
return
this
.established; }
set
{
if
(value !=
this
.established)
{
this
.established = value;
this
.OnPropertyChanged(
"Established"
);
}
}
}
public
int
StadiumCapacity
{
get
{
return
this
.stadiumCapacity; }
set
{
if
(value !=
this
.stadiumCapacity)
{
this
.stadiumCapacity = value;
this
.OnPropertyChanged(
"StadiumCapacity"
);
}
}
}
public
ObservableCollection<Player> Players
{
get
{
if
(
null
==
this
.players)
{
this
.players =
new
ObservableCollection<Player>();
}
return
this
.players;
}
}
public
Club()
{
}
public
Club(
string
name, DateTime established,
int
stadiumCapacity)
{
this
.name = name;
this
.established = established;
this
.stadiumCapacity = stadiumCapacity;
}
public
Club(
string
name, DateTime established,
int
stadiumCapacity, ObservableCollection<Player> players)
:
this
(name, established, stadiumCapacity)
{
this
.players = players;
}
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));
}
public
override
string
ToString()
{
return
this
.Name;
}
public
static
ObservableCollection<Club> GetClubs()
{
ObservableCollection<Club> clubs =
new
ObservableCollection<Club>();
Club club;
// Liverpool
//club = parent_order
//club.OrderChain.Add
club =
new
Club(
"Liverpool"
,
new
DateTime(1892, 1, 1), 45362);
club.Players.Add(
new
Player(
"Pepe Reina"
, 25, Position.GK,
"Spain"
));
club.Players.Add(
new
Player(
"Jamie Carragher"
, 23, Position.DF,
"England"
));
club.Players.Add(
new
Player(
"Steven Gerrard"
, 8, Position.MF,
"England"
));
club.Players.Add(
new
Player(
"Fernando Torres"
, 9, Position.FW,
"Spain"
));
clubs.Add(club);
// Manchester Utd.
club =
new
Club(
"Manchester Utd."
,
new
DateTime(1878, 1, 1), 76212);
club.Players.Add(
new
Player(
"Edwin van der Sar"
, 1, Position.GK,
"Netherlands"
));
club.Players.Add(
new
Player(
"Rio Ferdinand"
, 5, Position.DF,
"England"
));
club.Players.Add(
new
Player(
"Ryan Giggs"
, 11, Position.MF,
"Wales"
));
club.Players.Add(
new
Player(
"Wayne Rooney"
, 10, Position.FW,
"England"
));
clubs.Add(club);
// Chelsea
club =
new
Club(
"Chelsea"
,
new
DateTime(1905, 1, 1), 42055);
club.Players.Add(
new
Player(
"Petr ÄŒech"
, 1, Position.GK,
"Czech Republic"
));
club.Players.Add(
new
Player(
"John Terry"
, 26, Position.DF,
"England"
));
club.Players.Add(
new
Player(
"Frank Lampard"
, 8, Position.MF,
"England"
));
club.Players.Add(
new
Player(
"Nicolas Anelka"
, 39, Position.FW,
"France"
));
clubs.Add(club);
// Arsenal
club =
new
Club(
"Arsenal"
,
new
DateTime(1886, 1, 1), 60355);
club.Players.Add(
new
Player(
"Manuel Almunia"
, 1, Position.GK,
"Spain"
));
club.Players.Add(
new
Player(
"Gaël Clichy"
, 22, Position.DF,
"France"
));
club.Players.Add(
new
Player(
"Cesc FÃ bregas"
, 4, Position.MF,
"Spain"
));
club.Players.Add(
new
Player(
"Robin van Persie"
, 11, Position.FW,
"Netherlands"
));
clubs.Add(club);
return
clubs;
}
}
}
...
How do i have to implement the setter-Methods in MyViewModel?
XAML:
<
Grid
DataContext
=
"{Binding}"
>
<
Grid.RowDefinitions
>
<
RowDefinition
Height
=
"*"
/>
<
RowDefinition
Height
=
"Auto"
/>
</
Grid.RowDefinitions
>
<
telerik:RadGridView
Grid.Row
=
"0"
Name
=
"orderGrid"
ItemsSource
=
"{Binding Order_View, UpdateSourceTrigger=PropertyChanged}"
IsSynchronizedWithCurrentItem
=
"True"
AutoGenerateColumns
=
"False"
Margin
=
"5"
>
<
telerik:RadGridView.ChildTableDefinitions
>
<
telerik:GridViewTableDefinition
/>
</
telerik:RadGridView.ChildTableDefinitions
>
<
telerik:RadGridView.Columns
>
<
telerik:GridViewColumn
Header
=
"Priority"
>
<
telerik:GridViewColumn.CellTemplate
>
<
DataTemplate
>
<
StackPanel
Orientation
=
"Horizontal"
>
<
Image
Height
=
"20"
Source
=
"{Binding PriorityImage}"
/>
<
TextBlock
Text
=
"{Binding OrderPriorityShortcut}"
Margin
=
"1.2"
/>
</
StackPanel
>
</
DataTemplate
>
</
telerik:GridViewColumn.CellTemplate
>
</
telerik:GridViewColumn
>
<
telerik:GridViewColumn
Header
=
"Transport"
>
<
telerik:GridViewColumn.CellTemplate
>
<
DataTemplate
>
<
StackPanel
Orientation
=
"Horizontal"
>
<
Image
Height
=
"20"
Source
=
"{Binding TransportImage}"
/>
<
TextBlock
Text
=
"{Binding TransportTypeShortcut}"
Margin
=
"1.2"
/>
</
StackPanel
>
</
DataTemplate
>
</
telerik:GridViewColumn.CellTemplate
>
</
telerik:GridViewColumn
>
<
telerik:GridViewDataColumn
DataMemberBinding
=
"{Binding TransportWay}"
Header
=
"Transport Art"
IsReadOnly
=
"True"
/>
<
telerik:GridViewDataColumn
DataMemberBinding
=
"{Binding Device}"
Header
=
"Endgerät"
IsReadOnly
=
"True"
DataContext
=
"{Binding}"
/>
<
telerik:GridViewDataColumn
DataMemberBinding
=
"{Binding PickUpTime}"
Header
=
"Abholung"
IsReadOnly
=
"True"
/>
<
telerik:GridViewDataColumn
DataMemberBinding
=
"{Binding ArrivalTime}"
Header
=
"Ankunft"
IsReadOnly
=
"True"
/>
<
telerik:GridViewDataColumn
DataMemberBinding
=
"{Binding OrganisationUnitFrom}"
Header
=
"Von"
IsReadOnly
=
"True"
/>
<
telerik:GridViewDataColumn
DataMemberBinding
=
"{Binding OrganisationUnitTo}"
Header
=
"Nach"
IsReadOnly
=
"True"
/>
<
telerik:GridViewDataColumn
DataMemberBinding
=
"{Binding PatientName}"
Header
=
"Name"
IsReadOnly
=
"True"
/>
<
telerik:GridViewCheckBoxColumn
DataMemberBinding
=
"{Binding IsInfectious}"
Header
=
"Infektiös"
/>
</
telerik:RadGridView.Columns
>
<
telerik:RadGridView.HierarchyChildTemplate
>
<
DataTemplate
>
<
telerik:RadGridView
Name
=
"orderChainGrid"
Loaded
=
"orderChain_Loaded"
ItemsSource
=
"{Binding ChainOrders}"
AutoGenerateColumns
=
"False"
>
<
telerik:RadGridView.Columns
>
<
telerik:GridViewColumn
Header
=
"Priority"
>
<
telerik:GridViewColumn.CellTemplate
>
<
DataTemplate
>
<
StackPanel
Orientation
=
"Horizontal"
>
<
Image
Height
=
"20"
Source
=
"{Binding PriorityImage}"
/>
<
TextBlock
Text
=
"{Binding OrderPriorityShortcut}"
Margin
=
"1.2"
/>
</
StackPanel
>
</
DataTemplate
>
</
telerik:GridViewColumn.CellTemplate
>
</
telerik:GridViewColumn
>
<
telerik:GridViewColumn
Header
=
"Transport"
>
<
telerik:GridViewColumn.CellTemplate
>
<
DataTemplate
>
<
StackPanel
Orientation
=
"Horizontal"
>
<
Image
Height
=
"20"
Source
=
"{Binding TransportImage}"
/>
<
TextBlock
Text
=
"{Binding TransportTypeShortcut}"
Margin
=
"1.2"
/>
</
StackPanel
>
</
DataTemplate
>
</
telerik:GridViewColumn.CellTemplate
>
</
telerik:GridViewColumn
>
<
telerik:GridViewDataColumn
DataMemberBinding
=
"{Binding TransportWay}"
Header
=
"Transport Art"
IsReadOnly
=
"True"
/>
<
telerik:GridViewDataColumn
DataMemberBinding
=
"{Binding Device}"
Header
=
"Endgerät"
IsReadOnly
=
"True"
/>
<
telerik:GridViewDataColumn
DataMemberBinding
=
"{Binding PickUpTime}"
Header
=
"Abholung"
IsReadOnly
=
"True"
/>
<
telerik:GridViewDataColumn
DataMemberBinding
=
"{Binding ArrivalTime}"
Header
=
"Ankunft"
IsReadOnly
=
"True"
/>
<
telerik:GridViewDataColumn
DataMemberBinding
=
"{Binding OrganisationUnitFrom}"
Header
=
"Von"
IsReadOnly
=
"True"
/>
<
telerik:GridViewDataColumn
DataMemberBinding
=
"{Binding OrganisationUnitTo}"
Header
=
"Nach"
IsReadOnly
=
"True"
/>
<
telerik:GridViewDataColumn
DataMemberBinding
=
"{Binding PatientName}"
Header
=
"Name"
IsReadOnly
=
"True"
/>
<
telerik:GridViewCheckBoxColumn
DataMemberBinding
=
"{Binding IsInfectious}"
Header
=
"Infektiös"
/>
</
telerik:RadGridView.Columns
>
</
telerik:RadGridView
>
</
DataTemplate
>
</
telerik:RadGridView.HierarchyChildTemplate
>
In my project I get my data in a background thread. And every time when data changes, my grid should update. Can you post me an "update-Method" for the telerik datagrid?
At the moment, I tried to do the following in my backgroundworker:
this
.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Normal,
(UpdateGrid)
delegate
(List<OrderView> ocov)
{
this
.orderGrid.ItemsSource = ov.DisplayOrders(
ref
ocov);
}, e.Result);
Greetings