【问题标题】:SL4 | DomainDataSource / DataGrid | Adding a blank row to insert new itemsSL4 |域数据源/数据网格 |添加空白行以插入新项目
【发布时间】:2010-12-18 20:13:39
【问题描述】:

我正在尝试将 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>

很遗憾,我的时间不多了。

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

【问题讨论】:

    标签: silverlight silverlight-4.0 datagrid row domaindatasource


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

      虽然它没有严格回答您的问题,但使用 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();
      }
      

      【讨论】:

        猜你喜欢
        • 2023-03-08
        • 1970-01-01
        • 1970-01-01
        • 2023-03-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-10
        • 2019-05-01
        相关资源
        最近更新 更多