2010-04-06 2 views
0

Я использую элемент управления gridview ASP.NET3.5 в новом проекте. Моя проблема в том, что gridview представляет данные в базовом табличном формате, тогда как я хочу сетку с поведением заголовка строки/группировки. Примером этого может быть веб-интерфейс Outlook, который может группировать электронные письма по дате, а также позволяет вам выбирать отдельные электронные письма для отображения.Gridview с заголовками строк

Моя проблема: я не вижу, как это можно легко сделать с помощью Gridview? Я нашел продукт под названием Telerik, у которого есть, казалось бы, причудливый Gridview, но я не решаюсь тратить деньги на отдельные компоненты, которые теперь также блокируют меня в сторонней структуре ...

+0

Так я лучше использовать опции ниже, а не использовать какую-то структуру, как Telerik? –

ответ

0

Управление Asp.Net GridView является частью семейства управления данными в контроллерах сервера Asp.Net. Он лучше всего используется для отображения табличных данных. Эффекты, такие как группировка строк и т. д., по умолчанию не поддерживаются. Как вы уже упоминали, на рынке есть сторонние поставщики, предлагающие элементы управления с этими дополнительные возможности.

Большую часть времени с помощью элементов управления ASP.NET, предоставляя функцию «из коробки», требуется создание настраиваемого элемента управления, наследуя от оригинала. если вам нужна сортировка по всем столбцам gridview, а также вам нужно выделить текущий выбранный столбец, тогда его лучше всего сделать, создав свой собственный элемент управления, который inturn наследует от Asp.Net GridView. В сети есть ресурсы, которые объясняют, как это может сделайте.

1

Я помню, как бороться с такой проблемой раньше, и я могу сочувствовать отсутствие помощи там на эту тему, так что если вы хотите GridView, это то, как вы можете это сделать:

Добавить событие OnRowDataBound в ваш GridView:

OnRowDataBound="grv_RowDataBound" 

Добавить что-то вроде этого в код позади:

private DateTime currentDate; 
private int extraCount; 

protected void grv_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     //assuming the cell with index 5 is the cell with the Date in it 
     if (currentDate != DateTime.Parse(e.Row.Cells[5].Text)) 
     { 
      //making a header row (so it looks different to the other rows) 
      var row = new GridViewRow(0, 0, DataControlRowType.Header, DataControlRowState.Insert); 
      var headerCell = new TableHeaderCell(); 
      headerCell.ColumnSpan = 3; //however many columns you have in your gridview 
      headerCell.Text = e.Row.Cells[5].Text; 
      row.Cells.Add(headerCell); 
      currentDate = DateTime.Parse(e.Row.Cells[5].Text); 
      extraCount++; 
      grvMortgages.Controls[0].Controls.AddAt(e.Row.RowIndex + extraCount, row); 
     } 
    } 
} 
Смежные вопросы