C# 是否可以编辑ASP.Net GridView中作为导航属性的实体集合?

C# 是否可以编辑ASP.Net GridView中作为导航属性的实体集合?,c#,asp.net,entity-framework-4,dynamic-data,C#,Asp.net,Entity Framework 4,Dynamic Data,首先是背景:我在VS2010中创建了一个ASP.NET动态数据项目。默认情况下,FieldTemplates文件夹中的Children.ascx文件在显示实体的子级时显示超链接。单击该链接时,您将导航到另一个表的单独网页。就我的具体目的而言,这是不可取的。我想把孩子们排在家长页面上,因为为了我的目的,他们共同组成了一个记录 我所做的是修改Children.ascx文件并用GridView替换超链接。代码如下所示: <asp:GridView ID="gridView1" runat="se

首先是背景:我在VS2010中创建了一个ASP.NET动态数据项目。默认情况下,FieldTemplates文件夹中的Children.ascx文件在显示实体的子级时显示超链接。单击该链接时,您将导航到另一个表的单独网页。就我的具体目的而言,这是不可取的。我想把孩子们排在家长页面上,因为为了我的目的,他们共同组成了一个记录

我所做的是修改Children.ascx文件并用GridView替换超链接。代码如下所示:

<asp:GridView ID="gridView1" runat="server" DataKeyNames="ID" 
 DataSource="<%#FieldValue%>" AutoGenerateEditButton="True" 
 AutoGenerateDeleteButton="true" OnRowEditing="GridView1_RowEditing" 
 OnRowCreated="GridView1_RowCreated"
 HeaderStyle-CssClass="th" CellPadding="6">
    <EmptyDataTemplate>
        There are currently no items in this table.
    </EmptyDataTemplate>
</asp:GridView>

此表中当前没有项目。
没什么特别的,重要的部分只是来自字段模板的“FieldValue”属性。这是正在传入的实体集合。OnRowEditing事件中没有发生任何事情,它只是抱怨没有处理它,所以我添加了一个处理程序

当我运行项目时,它显示得很好。子集合在GridView中呈现,就像我想要的那样。但是,当我单击任何行上的“编辑”按钮时,所有列都会消失。行仍然存在,因此GridView似乎仍然知道它有数据,但列不会自动生成(尽管上面的代码中没有列出该属性,但默认情况下会设置该属性)

经过大量阅读,我发现GridView无法绑定到导航属性上的属性。例如,如果我有一个带有导航属性Table2的Table1,我不能绑定到Table2.Column1,我必须使用Eval。但是,我想知道,因为在本例中,我正在将整个实体集合输入GridView,这样是否可以避免这个问题。这就是我的问题所在。根据我的设置,是否可以让GridView允许编辑,或者我是SOL


如果这是不可能的,那么在动态数据站点中完成我正在做的事情(在一个页面上编辑父项和子项)的推荐方法是什么?我知道我可以在页面上删除多个EntityDataSource,只需将子项的单独GridView映射到这些子项,但在测试中,我发现主表会自动加载其子项。创建新的EntityDataSource来加载已经存在的数据似乎是一种浪费。另外,使用一个EntityDataSource,所有数据都将在一次操作中自动关联和更新。

父子关系很可能在EDMX中定义。然后,动态数据使用基于该关系的子字段模板

您需要两个自定义控件,一个用于显示(Children.ascx),另一个用于插入(Children\u Insert.ascx)。但是,我将不使用这两个文件,而是添加两个新文件:类似ChildrenGrid.ascx和ChildrenGrid_Insert.ascx的文件,并在元数据中引用它们

[UIHint("ChildrenGrid")]