EF5 Gridview只有Count&只读

时间:2012-11-01 16:47:35

标签: frameworks entity datasource

在实体框架中当我从数据源添加拖动时,网格视图仅显示Count&是Read Only Column,我也尝试过手动分配datsource但仍无效。

2 个答案:

答案 0 :(得分:4)

通过一些研究,我找到了一个解决方案。

BTW我先使用代码。

在父实体中,我将子属性从list更改为ObservableCollection。 我还将命名空间System.Collections.ObjectModel添加到我的类中。

旧:Public Overridable Property PageElements As List(Of PageElement)

新:Public Overridable Property PageElements As ObservableCollection(Of PageElement)

删除现有数据源(以及表单中的控件)。然后重新创建数据源拖动到表单。

你可能需要创建一个名为ObservableListSource的类,并使用它而不是ObservableCollection,但它似乎已经解决了原来的问题。

这是我在网上其他地方找到的ObservableListSource的建议定义。

Public Class ObservableListSource(Of T As Class)
     Inherits ObservableCollection(Of T)
     Implements IListSource
     Private _bindingList As IBindingList

    Private ReadOnly Property ContainsListCollection() As Boolean Implements IListSource.ContainsListCollection
         Get
             Return False
         End Get
     End Property

    Private Function GetList() As IList Implements IListSource.GetList
         Return If(_bindingList, (InlineAssignHelper(_bindingList, Me.ToBindingList())))
     End Function
     Private Shared Function InlineAssignHelper(Of T)(ByRef target As T, value As T) As T
         target = value
         Return value
     End Function
EndCLass

答案 1 :(得分:3)

这对我有用(EF6):

向项目添加ObservableListSource类并更改名称空间

using System.Collections; 
using System.Collections.Generic; 
using System.Collections.ObjectModel; 
using System.ComponentModel; 
using System.Diagnostics.CodeAnalysis; 
using System.Data.Entity; 

namespace WinApp 
{ 
public class ObservableListSource<T> : ObservableCollection<T>, IListSource 
    where T : class 
{ 
    private IBindingList _bindingList; 

    bool IListSource.ContainsListCollection { get { return false; } } 

    IList IListSource.GetList() 
    { 
        return _bindingList ?? (_bindingList = this.ToBindingList()); 
    } 
} 

}

之后打开yourModel.tt文件

  • 使用“ICollection”(行“ObservableListSource”296)查找并替换484的两次出现。
  • 使用“HashSet”(行“ObservableListSource”)查找并替换第一次出现的50
  • 请勿替换代码中稍后发现的第二次出现的HashSet。