Как создать вложенный GridView для редактирования отношения EF Code First? - PullRequest
4 голосов
/ 14 июня 2011

У меня есть классическое отношение Parent-Child, которое я хотел бы использовать в CRUD с помощью asp:GridView элементов управления. CRUD родитель легко, но задача состоит в том, чтобы вложить asp:GridView в asp:GridView, который способен работать с дочерними отношениями.

Чтобы облегчить проблему, я создал пример. Рассмотрим следующий EF-код:

public class Context : DbContext
{         
    public DbSet<Animal> Animals { get; set; }
    public DbSet<Tag> Tags { get; set; }
}

public class Animal
{
    public int AnimalID { get; set; }
    public string Name { get; set; }
    public virtual IEnumerable<Tag> Tags { get; set; }
}

public class Tag
{
    public int TagID { get; set; }
    public string Name { get; set; }
}

Я использую asp:Gridview для просмотра / редактирования объектов Animal:

<asp:GridView runat="server" DataSourceID="animalDataSource" DataKeyNames="AnimalID" AutoGenerateColumns="false">   
    <Columns>
        <asp:BoundField DataField="Description" HeaderText="Description" />
        <asp:CommandField ShowCancelButton="true" ShowEditButton="true" ShowDeleteButton="true" />
    </Columns>
</asp:GridView>

DataSource связан с кодом позади:

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

Я хотел бы включить вложенный asp:Gridview в качестве одного из столбцов для добавления / удаления / редактирования Tag объектов, принадлежащих этому Animal. Как мне этого добиться?

1 Ответ

0 голосов
/ 14 июня 2011

BoundField отображает значение указанного поля источника данных в виде текста. Используя связанное поле, мы можем связать данные напрямую, используя текст заголовка и поле данных, не используя никаких элементов управления. , TemplateField позволяет сочетать разметку HTML, веб-элементы управления и синтаксис привязки данных. Мы можем определить наши собственные элементы управления asp.net в поле шаблона. поэтому в основном вы преобразуете связанное поле в столбец шаблона. Столбцы шаблона также поставляются с тегом редактирования шаблона, который предлагает вам больше, чем требуется стандартное редактирование этой строки таблицы вида ... например, когда в режиме редактирования поместите раскрывающийся список в эту строку для меня, чтобы выбрать из - возможности бесконечны, так что

  • изменить в поле шаблона перейти к редактированию

  • шаблон добавить элемент управления сеткой в ​​поле

  • добавить кнопку редактирования / удаления ссылки

  • перейти к свойству вложенной сетки под шаблоном редактирования
  • найти обновление, событие строки databounfd и т. Д.
  • думаю, это поможет

    Dim grd1 As 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
    

сделать что-то подобное, когда вы заполните родительскую сетку

...