У меня есть ASP.NET GridView, в котором есть столбцы, которые выглядят так:
| Foo | Bar | Total1 | Total2 | Total3 |
Можно ли создать заголовок на две строки, который выглядит следующим образом?
| | Totals |
| Foo | Bar | 1 | 2 | 3 |
Данные в каждой строке останутся неизменными, так как это просто для того, чтобы выровнять заголовок и уменьшить горизонтальное пространство, занимаемое сеткой.
Весь GridView сортируется в случае, если это имеет значение. Я не собираюсь добавлять добавочный охватывающий столбец "Итоги" к каким-либо функциям сортировки.
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);
}
}
}
Преимущество пользовательского элемента управления заключается в том, что вы можете видеть дополнительную строку заголовка в режиме конструктора веб-формы. Однако метод обработчика событий немного проще.