【问题标题】:Silverlight 4 Add New Item To DomainDataSourceSilverlight 4 将新项目添加到 DomainDataSource
【发布时间】:2011-07-01 15:11:58
【问题描述】:

我有一个简单的数据网格列出地址和一个子窗口,用户可以在其中编辑/添加新的。在带有数据网格的主窗体上,我有一个“插入新地址”按钮,它应该加载带有空地址对象的子窗口。但是它不会让我添加记录。难道我做错了什么?我目前的代码如下:

    Dim address As New Address
    Dim frmAddressObj As New frmAddress

    If frmAddressObj.AddressDomainDataSource.DataView.CanAdd = False Then
        frmAddressObj.AddressDomainDataSource.Load()
    End If
    frmAddressObj.AddressDomainDataSource.DataView.Add(address)

Address 是地址对象。 frmAddress 是子窗口窗体。 AddressDomainDataSource 是我在数据网格中使用的数据源,就像我在孩子中使用的一样。 CanAdd 总是错误的,我被告知在添加之前尝试加载,但这似乎没有帮助。当它到达 Add 方法时,此 ICollectionView 不支持“Add”异常。任何帮助,将不胜感激。谢谢

【问题讨论】:

    标签: silverlight data-binding service ria domaindatasource


    【解决方案1】:

    DataView 字段应被视为只读集合。 DomainDataSource 与 DataGrid 的最简单的一般用法是这样的:

    (myDataSource.DomainContext as myDomainContext).my_entitys.Remove(dgOrders.SelectedItem as order);
    (myDataSource.DomainContext as myDomainContext).SubmitChanges();
    

    插入也是类似的,你只需要使用

    my_entitys.Add(myNewEntityInstance); 
    

    而不是

    my_entitys.Remove(entityToRemove);
    

    对于更新,您只需调用

    (myDataSource.DomainContext as myDomainContext).SubmitChanges();
    

    【讨论】:

      【解决方案2】:

      您的域服务中还必须有插入方法。所以确保你有一个看起来像这样的方法:

      Public Sub InsertAddress(address As Address)
      End Sub
      

      或在 C# 中

      public void InsertAddress(Address address)
      

      【讨论】:

        【解决方案3】:

        我最近遇到了同样的问题,就我而言,DomainDataSource 尚未加载(甚至尚未绑定到其上下文),因为它驻留在未选择的 TabItem 中。

        确保您的 DomainDataSource 已正确加载到可视化树中,这解决了我的问题。

        【讨论】:

          猜你喜欢
          • 2011-03-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-11-24
          • 1970-01-01
          相关资源
          最近更新 更多