I'm using the latest build 2010.3.1501 (tested with SP1 too).
I use RadGridView with DomainDataSource and looks like there a bug when inserting rows.
If I subscribe to AddingNewDataItem and return new entity,
In RowEditEnded event:
* e.EditOperationType is always "Edit" instead of "Insert"
* DomainDataSource.HasChanges is always "False" instead of "True"
* and, of course. DomainDataSource.SubmitChanges() does not submit anything.
Here's the source code to reproduce:
<
UserControl
x:Class
=
"Accellos.DataServices.WUI.FileMaintenance.Controls.Test1.MyWorkspaceControl1"
xmlns:mt
=
"clr-namespace:Accellos.DataServices.MT.Client.DotNet;assembly=Accellos.DataServices.MT.Client.AccellosOneServiceAsync.SL"
xmlns:riaControls
=
"clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.DomainServices"
xmlns:telerik
=
"clr-namespace:Telerik.Windows.Controls;assembly=Telerik.Windows.Controls.GridView"
>
<
Grid
>
<
riaControls:DomainDataSource
QueryName
=
"GetAccounts"
AutoLoad
=
"True"
x:Name
=
"dds"
DataContext
=
"{Binding}"
>
<
riaControls:DomainDataSource.DomainContext
>
<
mt:AccountDomainContext
/>
</
riaControls:DomainDataSource.DomainContext
>
<
riaControls:DomainDataSource.SortDescriptors
>
<
riaControls:SortDescriptor
PropertyPath
=
"Id"
/>
</
riaControls:DomainDataSource.SortDescriptors
>
</
riaControls:DomainDataSource
>
<
telerik:RadGridView
x:Name
=
"gridView1"
AutoGenerateColumns
=
"True"
ItemsSource
=
"{Binding Data, ElementName=dds}"
/>
</
Grid
>
</
UserControl
>
using
System;
using
Accellos.DataServices.MT.Client.DotNet;
using
Accellos.DataServices.MT.Common.DTO;
using
Accellos.Platform.Silverlight.Workspace;
using
Telerik.Windows.Controls;
using
Telerik.Windows.Controls.GridView;
namespace
Accellos.DataServices.WUI.FileMaintenance.Controls.Test1
{
public
partial
class
MyWorkspaceControl1
{
#region Constructor
public
MyWorkspaceControl1(IWorkspace workspace)
{
InitializeComponent();
if
(workspace ==
null
)
throw
new
ArgumentNullException(
"workspace"
);
DataServicesApplication application = (DataServicesApplication)workspace.WorkspaceContainer.GetApplicationById(DataServicesApplication.ApplicationId);
((AccountDomainClient)dds.DomainContext.DomainClient).MiddleTierClient = application.CreateMiddleTierServiceClient();
gridView1.AddingNewDataItem +=
delegate
(
object
sender, GridViewAddingNewEventArgs e)
{
e.NewObject =
new
Account();
};
gridView1.RowEditEnded +=
delegate
(
object
o, GridViewRowEditEndedEventArgs e)
{
if
(e.EditAction != GridViewEditAction.Commit)
{
if
(!dds.IsSubmittingChanges)
dds.RejectChanges();
return
;
}
// Is "Edit" instead of "Insert" when inserting
GridViewEditOperationType operation = e.EditOperationType;
// Always "False" when inserting
bool
hasChanges = dds.HasChanges;
// When inserting does not submit any changes
if
(!dds.IsSubmittingChanges)
dds.SubmitChanges();
};
}
#endregion
}
}
If I comment AddingNewDataItem everything works as expected.
Does anyone knows if there any workaround ?