Есть ли эффективный способ перезаписать вывод HTML верхнего и нижнего колонтитула элемента управления ASP.NET GridView
?
Я хотел бы реализовать методологию, похожую на тег HeaderTemplate
в ASP.NET Repeater
, или не требует динамического построения вывода HTML в коде страницы. Если эти два типа параметров доступны с помощью элемента управления ASP.NET GridView
.
В Gridview вы можете использовать событие RowCreated для полного "уничтожения" и воссоздания верхнего и нижнего колонтитула. Во время этого события проверьте, чтобы:
if (e.Row.RowType = DataControlRowType.Header)
{
// At this point you have access to e.Row.Cells
// You can now empty the collection and recreate it.
// If you create a singular cell in the collection
// you can then make its ColumnSpan reach across
// the length of the entire table. Then inside this
// cell you can add any set of controls you want.
// I've used this method to combine column headers
// and add specialty controls that simply wouldn't
// working using the HeaderTemplate
}
Так как это выполняется в RowCreated, во время RowDataBound у вас будет доступ к этим элементам управления, а затем можно будет манипулировать ими, как вам нравится, на основе данных. Это удобно для выполнения сложных вычислений в нижнем колонтитуле, настройки изображений в заголовке на основе сортировки и т.д.
Чтобы изменить проверку ячейки за ячейкой в RowCreated, это способ сделать это, например. если вы хотите добавить раскрывающийся список в столбец, чтобы разрешить фильтрацию, которую вы могли бы сделать.
if (e.Row.RowType = DataControlRowType.Header)
{
e.Row.Cells[0].Controls.Clear();
var ddlFilter = new DropDownList();
//add options etc
e.Row.Cells[0].Controls.Add(ddlFilter);
}
Если вы собираетесь конвертировать в одну ячейку и добавлять новые элементы управления, я бы просто установил ShowHeader=false
и поместил свою разметку/элементы управления над gridview
Вы также можете наследовать элемент управления и переопределить функцию Render. Я должен был сделать это, чтобы исправить недостаток переключателя ASP.NET. Основная идея здесь, вы можете изменить ее для своих нужд:
http://www.codeproject.com/KB/webforms/How_group_RButtons.aspx
Возможно, вы захотите рассмотреть возможность использования Адаптер управления ASP.Net. Я использовал их для самых простых вещей, но так же, как Скотт Гатри отмечает:
Контрольный адаптер позволяет вам подключаться к любому серверному элементу управления ASP.NET и переопределить, изменить и/или настроить рендеринг выходной логики этого контроль.
Toolkit также содержит несколько адаптеров "из коробки", которые вы можете использовать для примеров, в том числе GridView. Опять же, я не уверен на 100%, что вы сможете делать именно то, что хотите, но это стоит проверить наверняка. Если не что иное, как поставить другой трюк ASP.Net под ваш ремень.