Честно говоря, GridViews не обеспечат вам значительного прироста производительности по сравнению с другими связанными с таблицами элементами управления ASP.NET.Если вы напишите иерархический объект следующим образом:
public class Employee
{
[Constructors go here]
public int EmployeeID { get; private set; }
public string EmployeeName { get; private set; }
public List<Child> Children { get; private set; } // Or Collection, Array, etc.
}
Вам все равно придется прослушивать событие RowDataBound
, привести DataItem
строки к вашему дочернему классу, а затем программно назначить егосвойства для GridViewRow.
Кроме того, у вас будет удовольствие создать TemplateField
, в котором вы закроете текущие теги <td>
и <tr>
(или <div>
или <span>
, если вы чувствуете себя немного менее мазохистски), а затем вставьте еще один GridView в таблицу, которую уже сгенерировал GridView
.
Обратите внимание, что мы не дошли до того места, где вы вставляетеудалите и обновите.
Честно говоря, если у вас есть время, попробуйте использовать AJAX (реальный материал, а не мусор AutoPostBack
).ASP.NET WebMethods может возвращать HTML из элементов управления ASP.NET, вызывая .RenderControl()
, и если вам абсолютно не нужно загружать всю сетку и все ее дочерние элементы одним махом и отображать все это для вашего пользователя, это будет более чемскорее всего, вы уменьшите время загрузки страницы и уменьшите нагрузку на ваш веб-сервер.
Если вы объедините это с jQuery, вызывать ASP.NET WebMethods легко.Как человек, который сделал это в обоих направлениях, я бы сказал, что метод jQuery / AJAX на самом деле проще, чем написание некоторого звукового оператора LINQ (или запроса ADO.NET), создание гигантского бизнес-объекта и попытка управлять всем этим в одномзагрузка страницы.
С другой стороны, если вы связаны и решили использовать для этого ASP.NET, я бы весьма предложил вам прочитать статьи MSDN на Событие RowEditing .Он детализирует некоторые тонкости правильной установки и получения EditIndex и разбивает его события на крошечные функции, которые абсолютно необходимы для чего-то подобного.В дополнение к тому, что вы видите там, я бы предложил вам сохранить вашу коллекцию бизнес-объектов в сеансе и изменить их в любом событии редактирования / создания / удаления строки, а затем повторно привязать ваш GridView.
Использованиеэтот метод, ваши пользователи в идеале должны были бы нажать кнопку отправки, чтобы фактически сохранить любые изменения.Это позволяет вам (и им) избежать сильной душевной боли, когда кто-то случайно удаляет элемент или обновляет его с недопустимым значением.