1

我正在尝试将 DataForm 和 DataGrid 绑定到 DomainDataSource 并实现添加、删除和编辑项目的功能。

一切都适用于 DataForm 部分。但是我如何能够使用 DataGrid 添加新记录?到目前为止,我知道,有两种工作选择:

  1. 向 DataView 添加一个新的“空白”项。

    • 问题:由于关键要求和约束,我收到了验证错误。
  2. 使用 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>

不幸的是,我的时间不多了。

提前感谢您的帮助。来自德国的问候。希望任何人都可以提供帮助;)

4

2 回答 2

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();
}
于 2012-01-07T05:50:34.423 回答
0

我刚刚遇到了这个问题,试图找出类似的东西。在这里发布,希望这可以节省其他人的时间:

在“新记录”的代码隐藏中Button's Click

private void OnNewRecordClick(object sender, System.Windows.RoutedEventArgs e)
{ childDomainDataSource.DataView.Add(new Child()); }

立即获取新DataGrid记录,您仍然可以SubmitChangesCommand在 DDS 上将新条目发布回 DB。

于 2011-03-08T13:35:26.333 回答