Frameworks EF5 Grdiview仅计数&;只读

Frameworks EF5 Grdiview仅计数&;只读,frameworks,entity,datasource,Frameworks,Entity,Datasource,在实体框架中,当我添加“从数据源拖动”时,网格视图仅显示“计数”和“是只读”列,我也尝试手动分配数据源,但仍然不起作用。通过一些研究,我找到了一个解决方案 顺便说一句,我先用代码 在父实体中,我将子属性从list更改为ObservableCollection。 我还向类中添加了名称空间System.Collections.ObjectModel 旧:公共可重写属性PageElements作为(PageElement的)列表 新增:Public Overridable Property PageE

在实体框架中,当我添加“从数据源拖动”时,网格视图仅显示“计数”和“是只读”列,我也尝试手动分配数据源,但仍然不起作用。

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

顺便说一句,我先用代码

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

旧:
公共可重写属性PageElements作为(PageElement的)列表

新增:
Public Overridable Property PageElements As ObservableCollection(属于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
这对我很有用(EF6):

observeListSource
类添加到项目中并更改名称空间

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()); 
    } 
} 
使用系统集合;
使用System.Collections.Generic;
使用System.Collections.ObjectModel;
使用系统组件模型;
使用System.Diagnostics.CodeAnalysis;
使用System.Data.Entity;
名称空间WinApp
{ 
公共类ObservableListSource:ObservableCollection,IListSource
T:在哪里上课
{ 
私有IBindingList _bindingList;
bool IListSource.ContainsListCollection{get{return false;}
IList IListSource.GetList()
{ 
返回_bindingList??(_bindingList=this.ToBindingList());
} 
} 
}

然后打开
yourModel.tt
文件

  • 查找两个出现的
    “ICollection”
    ,并将其替换为
    “ObservableListSource”
    (行
    296
    484
  • 查找第一个出现的
    “HashSet”
    ,并将其替换为
    “observeListSource”
    (第
    50行)
    
  • 不要替换代码后面第二次出现的HashSet

请提供您尝试过但遇到困难的代码。你得到的输出是什么?你在寻找什么?为什么EF6会出现这个问题??我觉得很奇怪。