C# 是否可以编辑ASP.Net GridView中作为导航属性的实体集合?
首先是背景:我在VS2010中创建了一个ASP.NET动态数据项目。默认情况下,FieldTemplates文件夹中的Children.ascx文件在显示实体的子级时显示超链接。单击该链接时,您将导航到另一个表的单独网页。就我的具体目的而言,这是不可取的。我想把孩子们排在家长页面上,因为为了我的目的,他们共同组成了一个记录 我所做的是修改Children.ascx文件并用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
<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")]