У меня есть ASP.NET GridView, у которого есть столбцы, которые выглядят так:
| Foo | Bar | Total1 | Total2 | Total3 |
Можно ли создать заголовок в двух строках, который выглядит следующим образом?
| | Totals |
| Foo | Bar | 1 | 2 | 3 |
Данные в каждой строке будут оставаться неизменными, так как это просто подходит для заголовка и уменьшает горизонтальное пространство, которое занимает сетка.
Весь GridView сортируется в случае, если это имеет значение. Я не предполагаю, что добавленный столбец "Totals" будет иметь любую функцию сортировки.
Edit:
Основываясь на одной из приведенных ниже статей, я создал класс, который наследуется от GridView и добавляет вторую строку заголовка.
namespace CustomControls
{
public class TwoHeadedGridView : GridView
{
protected Table InnerTable
{
get
{
if (this.HasControls())
{
return (Table)this.Controls[0];
}
return null;
}
}
protected override void OnDataBound(EventArgs e)
{
base.OnDataBound(e);
this.CreateSecondHeader();
}
private void CreateSecondHeader()
{
GridViewRow row = new GridViewRow(0, -1, DataControlRowType.Header, DataControlRowState.Normal);
TableCell left = new TableHeaderCell();
left.ColumnSpan = 3;
row.Cells.Add(left);
TableCell totals = new TableHeaderCell();
totals.ColumnSpan = this.Columns.Count - 3;
totals.Text = "Totals";
row.Cells.Add(totals);
this.InnerTable.Rows.AddAt(0, row);
}
}
}
Если вы новичок в ASP.NET, как я, я должен также указать, что вам нужно:
1) Зарегистрируйте свой класс, добавив такую строку в свою веб-форму:
<%@ Register TagPrefix="foo" NameSpace="CustomControls" Assembly="__code"%>
2) Измените asp: GridView в вашей предыдущей разметке на foo: TwoHeadedGridView. Не забывайте закрывающий тег.
Другое редактирование:
Вы также можете сделать это, не создавая собственный класс.
Просто добавьте обработчик событий для события DataBound вашей сетки следующим образом:
protected void gvOrganisms_DataBound(object sender, EventArgs e)
{
GridView grid = sender as GridView;
if (grid != null)
{
GridViewRow row = new GridViewRow(0, -1,
DataControlRowType.Header, DataControlRowState.Normal);
TableCell left = new TableHeaderCell();
left.ColumnSpan = 3;
row.Cells.Add(left);
TableCell totals = new TableHeaderCell();
totals.ColumnSpan = grid.Columns.Count - 3;
totals.Text = "Totals";
row.Cells.Add(totals);
Table t = grid.Controls[0] as Table;
if (t != null)
{
t.Rows.AddAt(0, row);
}
}
}
Преимущество настраиваемого элемента управления заключается в том, что вы можете увидеть дополнительную строку заголовка в представлении дизайна своей веб-формы. Однако метод обработчика событий немного проще.