ASP.NET: можно ли использовать GridView для создания иерархии?

Мы используем элементы управления GridView на некоторых страницах нашего проекта, которые мы не хотим кардинально менять. Можно ли создать иерархию в gridview? Можно ли этого достичь, используя GridView внутри Gridview, чтобы получить отношение родитель-потомок?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
9 197
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Ответ принят как подходящий

Да, вы можете вкладывать GridView друг в друга. См. Следующую статью.

Вложенность GridViews

GridView довольно статичны. Мы используем XSLT, если таблицы будут более сложными, поэтому у нас есть полный контроль над ними. В противном случае Microsoft предоставляет другие элементы управления ASP.NET, такие как DataRepeater.

Обратите внимание на Telerik, их RadGrid имеет такие вещи из коробки (вложенная иерархия и подробные таблицы)

http://demos.telerik.com/aspnet-ajax/Grid/Examples/Overview/DefaultCS.aspx

да, можно, и это довольно просто ...

лучший подход - иметь несколько объектов ObjectDataSource, чтобы весь процесс был проще для вас, или, конечно, вы можете привязать nasted gridview к параентному событию gridview OnRowDataBound, все зависит от вас :)

пример:

<asp:GridView ID = "gvGrandFather" runat = "server" DataSourceID = "odsGrandFather">
    <Columns>
        <asp:BoundField DataField = "myField1" HeaderText = "myText1" />
        <asp:BoundField DataField = "myField2" HeaderText = "myText2" />
        <asp:BoundField DataField = "myField3" HeaderText = "myText3" />
        <asp:TemplateField>
            <ItemTemplate>
                <asp:GridView ID = "gvFather" runat = "server" DataSourceID = "odsFather">
                    <Columns>
                        <asp:BoundField DataField = "myField1" HeaderText = "myText1" />
                        <asp:BoundField DataField = "myField2" HeaderText = "myText2" />
                        <asp:BoundField DataField = "myField3" HeaderText = "myText3" />
                        <asp:TemplateField>
                            <ItemTemplate>
                                <asp:GridView ID = "gvSon" runat = "server" DataSourceID = "odsSon">
                                    <Columns>
                                        <asp:BoundField DataField = "myField1" HeaderText = "myText1" />
                                        <asp:BoundField DataField = "myField2" HeaderText = "myText2" />
                                        <asp:BoundField DataField = "myField3" HeaderText = "myText3" />
                                    </Columns>
                                </asp:GridView>
                            </ItemTemplate>
                        </asp:TemplateField>
                    </Columns>
                </asp:GridView>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

<asp:ObjectDataSource ID = "odsGrandFather" runat = "server" DataObjectTypeName = "Company" TypeName = "CompanyDAO" SelectMethod = "FindAll" />
<asp:ObjectDataSource ID = "odsFather" runat = "server" DataObjectTypeName = "Employees" TypeName = "EmployeesDAO" SelectMethod = "FindByID">
    <SelectParameters>
        <asp:Parameter Name = "myFieldInCompanyObject" Type = "String" />
    </SelectParameters>
</asp:ObjectDataSource>
<asp:ObjectDataSource ID = "odsSon" runat = "server" DataObjectTypeName = "Person"TypeName = "PersonsDAO" SelectMethod = "FindByID">
    <SelectParameters>
        <asp:Parameter Name = "myFieldInEmployeesObject" Type = "String" />
    </SelectParameters>
</asp:ObjectDataSource>

представьте, что у вас есть объект компании, например

Company
  Field1
  Field2
  Field3
  Employees witch is List<Person>
    Field1
    Field2
    Field3
    Person  witch is List<Person>
      Field1
      Field2
      Field3

Все, что вам нужно сделать, это DAO для каждого и вернуть список или сам объект, например

public class CompanyDAO
{
    private List<Company> Companies
    {
        get
        {
            List<Company> companies = HttpContext.Current.Session["Companies"] as List<Company>;
            if (companies == null)
                companies = new List<Company>();
            return companies;
        }
    }
    public CompanyDAO() { }

    [DataObjectMethod(DataObjectMethodType.Select)]
    public IEnumerable<Company> FindAll()
    {
        return this.Companies;
    }

    [DataObjectMethod(DataObjectMethodType.Select)]
    public IEnumerable<Company> FindByID(String CompanyID)
    {
        return (from c in this.Companies where c.ID == CompanyID select c).ToList();
    }
}

надеюсь, это поможет увидеть свет в конце туннеля;)

Получит ли эта реализация дочернюю строку под родительской строкой? Я не хочу, чтобы дочерняя сетка находилась в той же строке, что и родительская, но под родительской строкой.

renegadeMind 16.01.2009 15:35

если вы хотите под, вам нужно использовать ListView, здесь есть отличная статья: tinyurl.com/7yzby2

balexandre 16.01.2009 17:42

Хорошие статьи по этому поводу здесь который использует ASP.NET AJAX и AJAX Control Toolkit, чтобы сделать его сворачиваемым.

Другие вопросы по теме