我正在尝试将DataForm和DataGrid绑定到DomainDataSource,并实现添加,删除和编辑项目的功能。
DataForm部分的一切都很好用。但是我如何使用DataGrid添加新记录? 就像我现在知道的那样,有两个可行的选择:
将新的 - “空白”项添加到DataView。
从Silverlight 4服务版本(2010年9月)使用“SDK功能在DataGrid控件中启用添加新行功能”
以下是一些与我项目中最重要的部分匹配的基本标记声明:
<Grid x:Name="LayoutRoot">
<sdk:DataGrid x:Name="ParentGrid" AutoGenerateColumns="False" ItemsSource="{Binding ElementName=parentDomainDataSource, Path=Data}"/>
<toolkit:DataForm x:Name="ParentForm" CommandButtonsVisibility="All" Grid.Row="1" ItemsSource="{Binding ElementName=parentDomainDataSource, Path=Data}"/>
<sdk:DataGrid x:Name="ChildGrid" Grid.Column="1" AutoGenerateColumns="False" ItemsSource="{Binding ElementName=childDomainDataSource, Path=Data}"/>
<toolkit:DataForm x:Name="ChildForm" CommandButtonsVisibility="All" ItemsSource="{Binding ElementName=childDomainDataSource, Path=Data}"/>
<riaControls:DomainDataSource AutoLoad="True" d:DesignData="{d:DesignInstance my1:Child, CreateList=true}" Name="childDomainDataSource" QueryName="GetChildrenQuery"
DomainContext="{StaticResource domainCtx}"/>
</riaControls:DomainDataSource>
<riaControls:DomainDataSource AutoLoad="True" d:DesignData="{d:DesignInstance my1:Parent, CreateList=true}" Name="parentDomainDataSource" QueryName="GetParentsQuery"
DomainContext="{StaticResource domainCtx}"/>
</Grid>
不幸的是,我的时间不多了。
提前感谢您的帮助。来自德国的问候。希望任何人都可以提供帮助;)
答案 0 :(得分:0)
我只是碰到了这个试图弄清楚类似事情的问题。在这里发帖,希望这能节省其他人的时间:
在“新记录”Button's Click
的代码隐藏中:
private void OnNewRecordClick(object sender, System.Windows.RoutedEventArgs e)
{ childDomainDataSource.DataView.Add(new Child()); }
DataGrid
立即获取新记录,您仍然可以在DDS上SubmitChangesCommand
将新条目发回给DB。
答案 1 :(得分:0)
虽然它没有严格回答你的问题,但使用PagedCollectionView的效果相当不错。此外,您可以点击Esc取消正在插入的行。
缺点是你必须做一些簿记。
private DomainService1 ctx = new DomainService1();
private PagedCollectionView pcvPersons = null;
private List<Person> tmpList = null;
private void LoadData()
{
ctx.Load(ctx.GetPersonsQuery(),
(op) =>
{
tmpList = new List<Person>(ctx.Persons);
pcvPersons = new PagedCollectionView(tmpList);
dataGrid1.ItemsSource = pcvPersons;
}, null);
}
private void AddButton_Click(object sender, RoutedEventArgs e)
{
Web.Person newItem = pcvPersons.AddNew();
}