如何创建嵌套的GridView来编辑EF Code First关系?

我有一个经典的父子关系,我想通过使用asp:GridView控件来CRUD。 对于CRUD,父级很容易,但挑战是在asp:GridView嵌套asp:GridView ,它能够处理子关系。

为了使问题更容易,我构建了一个例子。 请考虑以下EF代码:

 public class Context : DbContext { public DbSet Animals { get; set; } public DbSet Tags { get; set; } } public class Animal { public int AnimalID { get; set; } public string Name { get; set; } public virtual IEnumerable Tags { get; set; } } public class Tag { public int TagID { get; set; } public string Name { get; set; } } 

我正在使用asp:Gridview来查看/编辑Animal目标:

       

DataSource与代码绑定:

 protected void DataSource_ContextCreating(object sender, EntityDataSourceContextCreatingEventArgs e) { var context = new Context(); e.Context = ((IObjectContextAdapter)context).ObjectContext; } } 

我想包含一个嵌套的asp:Gridview作为添加/删除/编辑属于该Animal Tag对象的列之一。 我怎么能实现这个目标?

BoundField将指定的DataSource字段的值显示为文本。 通过使用绑定字段,我们可以使用标题文本和数据字段直接绑定数据,而无需使用任何控件。 。 TemplateField允许混合使用HTML标记,Web控件和数据绑定语法。 我们可以在模板字段中定义自己的asp.net控件。 所以基本上你将一个绑定字段转换为一个模板列模板列还带有一个编辑模板标签,它提供的不仅仅是标准编辑所需的gridview行…例如,当处于编辑模式时,在此行中放置一个下拉列表让我选择 – 可能性是无止境的

  • 更改为模板字段转到编辑

  • 模板将网格控件添加到字段

  • 添加编辑/删除链接按钮

  • 在编辑模板下继续嵌套网格的属性
  • 查找更新,行数据库事件等
  • 我认为这会有所帮助

    Dim grd1作为GridViewRow

      Dim gv As GridView Dim l1, l2 As Label Dim strsql As String For Each grd1 In GridView1.Rows 'find controls of parent gridrow l1 = grd1.FindControl("l00") l2 = grd1.FindControl("l1") gv = grd1.FindControl("gv1") strsql = "select file_name from product_file where pname='" & l1.Text & "' and categry='" & l2.Text & "'" Dim dt1 As New DataTable() Dim da1 As New SqlDataAdapter(strsql, con) da1.Fill(dt1) gv.DataSource = dt1 gv.DataBind() Next 

填充父网格时执行类似的操作