I have a RadGridView which is Dynamically Build with the help of
http://blogs.telerik.com/vladimirenchev/posts/11-09-28/dynamic-binding-for-your-silverlight-applications.aspx
http://www.telerik.com/forums/rowdetailstemplate-binding-with-dynamic-data
http://technobelities.blogspot.in/2013/03/dynamic-property-or-extended-property.html
My Xaml code is like this :
My View Model Loads RoutesGridData is an observable Collection which loaded Via Open RIA Domain Service. I also have ICommand EditGridRowCommand in my ViewModel.
I m not getting How I can get the Edited Data in my ViewModel. I tried in 2 way
1. By running Custom Commands for Add New Row / Update Row / The top 2 Button
http://demos.telerik.com/silverlight/#GridView/Commands
they works But I m not getting how I can capture this Edited / Added Data in ViewModel & can send to Open RIA Domain Service for making changes In db.
2. I Tried with EventTrigger for RowEditEnded but I m not getting latest Updated Data so I can process It.
Any Help?
Extra Request:
As you see My DataRow is of IDictionary which I build by Join of Few tables mapped in Linq. so Keys are the name of Column & Value is the data of that Property. Now These Database Column Name are dirty I want to change the Key with Display Names How to do?
http://blogs.telerik.com/vladimirenchev/posts/11-09-28/dynamic-binding-for-your-silverlight-applications.aspx
http://www.telerik.com/forums/rowdetailstemplate-binding-with-dynamic-data
http://technobelities.blogspot.in/2013/03/dynamic-property-or-extended-property.html
using
System;
using
System.Collections.Generic;
using
System.ComponentModel;
using
System.Dynamic;
using
System.Net;
using
System.Windows;
using
System.Windows.Controls;
using
System.Windows.Documents;
using
System.Windows.Ink;
using
System.Windows.Input;
using
System.Windows.Media;
using
System.Windows.Media.Animation;
using
System.Windows.Shapes;
using
System.Linq;
using
Delasoft.Hpm.Infrastructure.Util.Const;
namespace
Delasoft.Hpm.Infrastructure.Models
{
public
class
DataRow :DynamicObject , INotifyPropertyChanged
{
public
IDictionary<
string
,
object
> data;
private
string
DVL_URL =
"http://delasoft.com"
;
public
DataRow()
{
data=
new
Dictionary<
string
,
object
>();
}
public
DataRow(IDictionary<
string
,
object
> data)
{
var a = data[
"Routeid"
];
string
dvlUrl = ProjectConstant.DVL_URL +
"BegMp="
+ data[
"BegMp"
].ToString() +
"routeid="
+ data[
"Routeid"
].ToString();
data[
"Dvlurl"
] = dvlUrl;
this
.data = data;
this
.data.OrderBy(x => x.Key);
}
public
DataRow(IDictionary<
string
,
object
> data1,IDictionary<
string
,
object
> data2)
{
this
.data = data1.Union(data2).ToDictionary(k => k.Key, v => v.Value);
string
dvlUrl = ProjectConstant.DVL_URL +
"BegMp="
+ data[
"BegMp"
].ToString() +
"routeid="
+ data[
"Routeid"
].ToString();
data[
"Dvlurl"
] = dvlUrl;
this
.data.OrderBy(x => x.Key);
}
public
DataRow(IDictionary<
string
,
object
> data1, IDictionary<
string
,
object
> data2, IDictionary<
string
,
object
> data3)
{
this
.data = data1.Union(data2).ToDictionary(k => k.Key, v => v.Value).Union(data3).ToDictionary(k => k.Key, v => v.Value);
string
dvlUrl = ProjectConstant.DVL_URL +
"BegMp="
+ data[
"BegMp"
].ToString() +
"routeid="
+ data[
"Routeid"
].ToString();
data[
"Dvlurl"
] = dvlUrl;
this
.data.OrderBy(x => x.Key);
}
public
override
IEnumerable<
string
> GetDynamicMemberNames()
{
//return base.GetDynamicMemberNames();
return
data.Keys;
}
public
override
bool
TryGetMember(GetMemberBinder binder,
out
object
result)
{
//return base.TryGetMember(binder, out result);
result=
this
[binder.Name];
return
true
;
}
public
override
bool
TrySetMember(SetMemberBinder binder,
object
value)
{
//return base.TrySetMember(binder, value);
this
[binder.Name] = value;
return
true
;
}
private
void
OnPropertyChanged(
string
propertyName)
{
if
(PropertyChanged !=
null
)
{
PropertyChanged(
this
,
new
PropertyChangedEventArgs(propertyName));
}
}
public
object
this
[
string
columnName]
{
get
{
if
(data.ContainsKey(columnName))
{
return
data[columnName];
}
return
null
;
}
set
{
if
(!data.ContainsKey(columnName))
{
data.Add(columnName, value);
OnPropertyChanged(columnName);
}
else
{
if
(data[columnName] != value)
{
data[columnName] = value;
OnPropertyChanged(columnName);
}
}
}
}
#region INotifyPropertyChanged Members
public
event
PropertyChangedEventHandler PropertyChanged;
#endregion
}
}
My Xaml code is like this :
<
StackPanel
Grid.Column
=
"0"
Grid.Row
=
"0"
Orientation
=
"Horizontal"
>
<
telerik:RadButton
Content
=
"Save Edit / Update"
HorizontalAlignment
=
"Left"
VerticalAlignment
=
"Center"
Margin
=
"5,0"
Command
=
"telerikGrid:RadGridViewCommands.CommitEdit"
CommandTarget
=
"{Binding ElementName=DictRouteGridView}"
/>
<
telerik:RadButton
Content
=
"Cancel Edit / Update"
HorizontalAlignment
=
"Left"
VerticalAlignment
=
"Center"
Margin
=
"5,0"
Command
=
"telerikGrid:RadGridViewCommands.CancelRowEdit"
CommandTarget
=
"{Binding ElementName=DictRouteGridView}"
/>
<
telerik:RadGridView
Grid.Row
=
"1"
x:Name
=
"DictRouteGridView"
ItemsSource
=
"{Binding RoutesGridData}"
SelectionMode
=
"Extended"
IsSynchronizedWithCurrentItem
=
"true"
SelectedItem
=
"{Binding SelectedDataRowsItem,Mode=TwoWay}"
behaviour:RadGridSelectedItemsBindingBehavior.SelectedItems
=
"{Binding SelectedDataRowsItems}"
>
<
i:Interaction.Triggers
>
<
i:EventTrigger
EventName
=
"RowEditEnded"
>
<
i:InvokeCommandAction
Command
=
"{Binding EditGridRowCommand}"
CommandParameter
=
"{Binding ElementName=DictRouteGridView, Path=SelectedItem }"
></
i:InvokeCommandAction
>
</
i:EventTrigger
>
</
i:Interaction.Triggers
>
</
telerik:RadGridView
>
My View Model Loads RoutesGridData is an observable Collection which loaded Via Open RIA Domain Service. I also have ICommand EditGridRowCommand in my ViewModel.
I m not getting How I can get the Edited Data in my ViewModel. I tried in 2 way
1. By running Custom Commands for Add New Row / Update Row / The top 2 Button
http://demos.telerik.com/silverlight/#GridView/Commands
they works But I m not getting how I can capture this Edited / Added Data in ViewModel & can send to Open RIA Domain Service for making changes In db.
2. I Tried with EventTrigger for RowEditEnded but I m not getting latest Updated Data so I can process It.
Any Help?
Extra Request:
As you see My DataRow is of IDictionary which I build by Join of Few tables mapped in Linq. so Keys are the name of Column & Value is the data of that Property. Now These Database Column Name are dirty I want to change the Key with Display Names How to do?