2016-05-10 5 views
2

Например, я хочу иметь свой заголовок, как:заголовок столбца с пролетом столбца в GridView

|  Header Column   |  Header Column2  | 
|apple|Microsoft|Android|Dell|HP|Targus|Stack Overflow|Acer| 

Мой VB код, чтобы добавить столбец является следующее:

Dim dt As New DataTable 
dt.Clear() 
    dt.Columns.Add("apple") 
    dt.Columns.Add("Microsoft") 
Dim mr As DataRow 
    mr = dt.NewRow 
    mr("apple") = "Macbook" 
    mr("Microsoft") = "Surface Pro" 
dt.Rows.Add(mr) 
GridView1.DataSource = dt 
GridView1.DataBind() 
+0

вы можете попробовать Repeater, который позволяет вам сделать индивидуальный дизайн – techspider

+0

как бы использовать повторитель в этой ситуации? – JT4U

+0

Вы можете добавить дополнительные 'HeaderRow' в Gridview: http://stackoverflow.com/questions/36716084/how-to-create-custom-header-in-asp-net-gridview/36727468#36727468 – fnostro

ответ

2

Это можно сделать в событии RowDataBound в GridView. Просто проверьте, является ли текущая строка заголовком, и если да, установите, какие ячейки должны занимать.

Сначала убедитесь, что GridView обрабатывает событие, связанное с данными о строках.

<asp:GridView ID="GridView1" runat="server" OnRowDataBound="gridView1_RowDataBound"> 
    ... 
</asp:GridView> 

Затем определите, какая ячейка должна охватывать. После этого скройте ячейки, в которые будет проходить развернутая ячейка.

Protected Sub gridView1_RowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs) 
    If e.Row.RowType = DataControlRowType.Header Then 
     e.Row.Cells(0).ColumnSpan = 3 
     e.Row.Cells(1).Visible = False 
     e.Row.Cells(2).Visible = False 
    End If 
End Sub 

Просто помните, что это жесткое кодирование может привести к проблемам в будущем, если любые столбцы будут добавлены или удалены.

+0

Это необходимо сделать в PreRender, поскольку привязка данных не всегда возникает, если источник данных кэшируется. – fnostro

+0

@fnostro - Интересно. Хотя я не знаю, буду ли я полностью следовать. Вы имеете в виду [кэширование данных с использованием элементов управления источниками данных] (https://msdn.microsoft.com/en-us/library/ms227994 (v = vs.100) .aspx)? Если это так, я просто дал это испытание самому, чтобы посмотреть, как это работает. Я заметил, что он каждый раз вызывал RowDataBound независимо от того, использовал ли он кешированные данные. Вы иногда говорите, что это может быть не так? –

+0

Это зависит от вашего дизайна. Но обычно источники данных должны всегда кэшироваться либо с помощью 'SqlDataSource', либо аналогичного кэширования или программно в кэше приложений. Но в кэше или нет, если вы всегда делаете вызов 'DataBind()', тогда это нормально оставить в RowDataBound. Заголовок будет просто исчезать, если вы переключитесь на кешированный источник данных (и прекратите делать ручные вызовы на 'DataBind()') – fnostro

Смежные вопросы