SL4 | DomainDataSource / DataGrid |添加空行以插入新项目

时间:2010-12-18 20:13:40

标签: silverlight silverlight-4.0 datagrid row domaindatasource

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

DataForm部分的一切都很好用。但是我如何使用DataGrid添加新记录? 就像我现在知道的那样,有两个可行的选择:

  1. 将新的 - “空白”项添加到DataView。

    • 问题:由于关键要求和约束,我收到了错误的错误。
  2. 从Silverlight 4服务版本(2010年9月)使用“SDK功能在DataGrid控件中启用添加新行功能”

    • 问题:究竟发生了什么变化?没有新成员或文档。
  3. 以下是一些与我项目中最重要的部分匹配的基本标记声明:

                      

    <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>
    

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

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

2 个答案:

答案 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();
}