Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > ASP .Net > datagrid - 2 header columns

Reply
Thread Tools

datagrid - 2 header columns

 
 
Mortar
Guest
Posts: n/a
 
      11-22-2005
i need a datagrid with 2 header columns. The top one might have 1
column spanning 5 columns of the header row below it.

what is the best way to do this? Could i have 2 datatables...1 filling
the top row, and the 2nd header row would come from the 2nd datatable?
In this case, i guess i would have to add a row manually above the
header row (2nd dataset) which is the set of 1st data?

if someone has ideas, code explaining it would be very helpful.

 
Reply With Quote
 
 
 
 
Ken Cox [Microsoft MVP]
Guest
Posts: n/a
 
      11-23-2005
Here's a script that should get you going. Let us know?

Ken
Microsoft MVP [ASP.NET]

<%@ Page Language="VB" %>
<script runat="server">
Dim dt As Data.DataTable
Private Sub Page_Load _
(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles MyBase.Load
DataGrid1.ShowHeader = True
DataGrid1.DataSource = CreateDataSource()
DataGrid1.DataBind()
End Sub
Private Sub DataGrid1_ItemDataBound _
(ByVal sender As Object, _
ByVal e As _
System.Web.UI.WebControls.DataGridItemEventArgs) _
Handles DataGrid1.ItemDataBound
' Have the first column header span
' two columns
' by Ken Cox Microsoft MVP [ASP.NET]
If e.Item.ItemType = ListItemType.Header Then
' Declare variables
Dim dgItem As DataGridItem
Dim tcells As TableCellCollection
Dim fcell As TableCell
Dim scell As TableCell
' Get a reference to the header row item
dgItem = e.Item
' Get a reference to the cells in the
' header row item
tcells = e.Item.Cells
' Get a reference to the cell we want to
' span. In this case, the first cell
fcell = e.Item.Cells(0)
' Set the text of the span cell
fcell.Text = "This is the spanned cell"
' Set the columns to span to 2
fcell.ColumnSpan = 2
' Get a reference to the second cell
scell = e.Item.Cells(1)
' Remove the second cell because it will
' be replaced by the spanning column
dgItem.Cells.Remove(scell)
End If
End Sub
Function CreateDataSource() As ICollection
' Create sample data for the DataList control.
dt = New Data.DataTable
Dim dr As Data.DataRow


' Define the columns of the table.
dt.Columns.Add(New Data.DataColumn("Student", GetType(String)))
dt.Columns.Add(New Data.DataColumn("Subject", GetType(String)))
dt.Columns.Add(New Data.DataColumn("Day", GetType(String)))


' Populate the table with sample values.
dr = dt.NewRow
dr(0) = "Ben"
dr(1) = "English"
dr(2) = "Thursday"
dt.Rows.Add(dr)
dr = dt.NewRow
dr(0) = "Ben"
dr(1) = "Geology"
dr(2) = "Monday"
dt.Rows.Add(dr)
dr = dt.NewRow
dr(0) = "Ben"
dr(1) = "Physics"
dr(2) = "Tuesday"
dt.Rows.Add(dr)
Dim dv As Data.DataView = New Data.DataView(dt)
Return dv
End Function

</script>

<html>
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:datagrid ID="DataGrid1" runat="server">
</asp:datagrid>
</div>
</form>
</body>
</html>

"Mortar" <> wrote in message
news:.. .
>i need a datagrid with 2 header columns. The top one might have 1
> column spanning 5 columns of the header row below it.
>
> what is the best way to do this? Could i have 2 datatables...1 filling
> the top row, and the 2nd header row would come from the 2nd datatable?
> In this case, i guess i would have to add a row manually above the
> header row (2nd dataset) which is the set of 1st data?
>
> if someone has ideas, code explaining it would be very helpful.
>


 
Reply With Quote
 
 
 
 
Mortar
Guest
Posts: n/a
 
      11-23-2005

Thanks Ken for the code. Much appreciated and useful. I understand
what you are doing, but am contemplating using no header on the grid
at all.

I am thinking of using 3 unions in my query (the 1st two being the
header rows, the 3rd being the dataset), then just manually changing
the background color of the 1st two rows to make them look like header
rows. What do you think?


On Tue, 22 Nov 2005 23:13:07 -0800, "Ken Cox [Microsoft MVP]"
<> wrote:

>Here's a script that should get you going. Let us know?
>
>Ken
>Microsoft MVP [ASP.NET]
>
><%@ Page Language="VB" %>
><script runat="server">
> Dim dt As Data.DataTable
> Private Sub Page_Load _
> (ByVal sender As System.Object, _
> ByVal e As System.EventArgs) _
> Handles MyBase.Load
> DataGrid1.ShowHeader = True
> DataGrid1.DataSource = CreateDataSource()
> DataGrid1.DataBind()
> End Sub
> Private Sub DataGrid1_ItemDataBound _
> (ByVal sender As Object, _
> ByVal e As _
> System.Web.UI.WebControls.DataGridItemEventArgs) _
> Handles DataGrid1.ItemDataBound
> ' Have the first column header span
> ' two columns
> ' by Ken Cox Microsoft MVP [ASP.NET]
> If e.Item.ItemType = ListItemType.Header Then
> ' Declare variables
> Dim dgItem As DataGridItem
> Dim tcells As TableCellCollection
> Dim fcell As TableCell
> Dim scell As TableCell
> ' Get a reference to the header row item
> dgItem = e.Item
> ' Get a reference to the cells in the
> ' header row item
> tcells = e.Item.Cells
> ' Get a reference to the cell we want to
> ' span. In this case, the first cell
> fcell = e.Item.Cells(0)
> ' Set the text of the span cell
> fcell.Text = "This is the spanned cell"
> ' Set the columns to span to 2
> fcell.ColumnSpan = 2
> ' Get a reference to the second cell
> scell = e.Item.Cells(1)
> ' Remove the second cell because it will
> ' be replaced by the spanning column
> dgItem.Cells.Remove(scell)
> End If
> End Sub
> Function CreateDataSource() As ICollection
> ' Create sample data for the DataList control.
> dt = New Data.DataTable
> Dim dr As Data.DataRow
>
>
> ' Define the columns of the table.
> dt.Columns.Add(New Data.DataColumn("Student", GetType(String)))
> dt.Columns.Add(New Data.DataColumn("Subject", GetType(String)))
> dt.Columns.Add(New Data.DataColumn("Day", GetType(String)))
>
>
> ' Populate the table with sample values.
> dr = dt.NewRow
> dr(0) = "Ben"
> dr(1) = "English"
> dr(2) = "Thursday"
> dt.Rows.Add(dr)
> dr = dt.NewRow
> dr(0) = "Ben"
> dr(1) = "Geology"
> dr(2) = "Monday"
> dt.Rows.Add(dr)
> dr = dt.NewRow
> dr(0) = "Ben"
> dr(1) = "Physics"
> dr(2) = "Tuesday"
> dt.Rows.Add(dr)
> Dim dv As Data.DataView = New Data.DataView(dt)
> Return dv
> End Function
>
></script>
>
><html>
><head runat="server">
> <title>Untitled Page</title>
></head>
><body>
> <form id="form1" runat="server">
> <div>
> <asp:datagrid ID="DataGrid1" runat="server">
> </asp:datagrid>
> </div>
> </form>
></body>
></html>
>
>"Mortar" <> wrote in message
>news:. ..
>>i need a datagrid with 2 header columns. The top one might have 1
>> column spanning 5 columns of the header row below it.
>>
>> what is the best way to do this? Could i have 2 datatables...1 filling
>> the top row, and the 2nd header row would come from the 2nd datatable?
>> In this case, i guess i would have to add a row manually above the
>> header row (2nd dataset) which is the set of 1st data?
>>
>> if someone has ideas, code explaining it would be very helpful.
>>

>


 
Reply With Quote
 
Mortar
Guest
Posts: n/a
 
      11-23-2005

hmm, om second thought looks like i'll have to do it your way....


On Wed, 23 Nov 2005 16:59:32 GMT, (Mortar) wrote:

>
>Thanks Ken for the code. Much appreciated and useful. I understand
>what you are doing, but am contemplating using no header on the grid
>at all.
>
>I am thinking of using 3 unions in my query (the 1st two being the
>header rows, the 3rd being the dataset), then just manually changing
>the background color of the 1st two rows to make them look like header
>rows. What do you think?
>
>
>On Tue, 22 Nov 2005 23:13:07 -0800, "Ken Cox [Microsoft MVP]"
><> wrote:
>
>>Here's a script that should get you going. Let us know?
>>
>>Ken
>>Microsoft MVP [ASP.NET]
>>
>><%@ Page Language="VB" %>
>><script runat="server">
>> Dim dt As Data.DataTable
>> Private Sub Page_Load _
>> (ByVal sender As System.Object, _
>> ByVal e As System.EventArgs) _
>> Handles MyBase.Load
>> DataGrid1.ShowHeader = True
>> DataGrid1.DataSource = CreateDataSource()
>> DataGrid1.DataBind()
>> End Sub
>> Private Sub DataGrid1_ItemDataBound _
>> (ByVal sender As Object, _
>> ByVal e As _
>> System.Web.UI.WebControls.DataGridItemEventArgs) _
>> Handles DataGrid1.ItemDataBound
>> ' Have the first column header span
>> ' two columns
>> ' by Ken Cox Microsoft MVP [ASP.NET]
>> If e.Item.ItemType = ListItemType.Header Then
>> ' Declare variables
>> Dim dgItem As DataGridItem
>> Dim tcells As TableCellCollection
>> Dim fcell As TableCell
>> Dim scell As TableCell
>> ' Get a reference to the header row item
>> dgItem = e.Item
>> ' Get a reference to the cells in the
>> ' header row item
>> tcells = e.Item.Cells
>> ' Get a reference to the cell we want to
>> ' span. In this case, the first cell
>> fcell = e.Item.Cells(0)
>> ' Set the text of the span cell
>> fcell.Text = "This is the spanned cell"
>> ' Set the columns to span to 2
>> fcell.ColumnSpan = 2
>> ' Get a reference to the second cell
>> scell = e.Item.Cells(1)
>> ' Remove the second cell because it will
>> ' be replaced by the spanning column
>> dgItem.Cells.Remove(scell)
>> End If
>> End Sub
>> Function CreateDataSource() As ICollection
>> ' Create sample data for the DataList control.
>> dt = New Data.DataTable
>> Dim dr As Data.DataRow
>>
>>
>> ' Define the columns of the table.
>> dt.Columns.Add(New Data.DataColumn("Student", GetType(String)))
>> dt.Columns.Add(New Data.DataColumn("Subject", GetType(String)))
>> dt.Columns.Add(New Data.DataColumn("Day", GetType(String)))
>>
>>
>> ' Populate the table with sample values.
>> dr = dt.NewRow
>> dr(0) = "Ben"
>> dr(1) = "English"
>> dr(2) = "Thursday"
>> dt.Rows.Add(dr)
>> dr = dt.NewRow
>> dr(0) = "Ben"
>> dr(1) = "Geology"
>> dr(2) = "Monday"
>> dt.Rows.Add(dr)
>> dr = dt.NewRow
>> dr(0) = "Ben"
>> dr(1) = "Physics"
>> dr(2) = "Tuesday"
>> dt.Rows.Add(dr)
>> Dim dv As Data.DataView = New Data.DataView(dt)
>> Return dv
>> End Function
>>
>></script>
>>
>><html>
>><head runat="server">
>> <title>Untitled Page</title>
>></head>
>><body>
>> <form id="form1" runat="server">
>> <div>
>> <asp:datagrid ID="DataGrid1" runat="server">
>> </asp:datagrid>
>> </div>
>> </form>
>></body>
>></html>
>>
>>"Mortar" <> wrote in message
>>news: ...
>>>i need a datagrid with 2 header columns. The top one might have 1
>>> column spanning 5 columns of the header row below it.
>>>
>>> what is the best way to do this? Could i have 2 datatables...1 filling
>>> the top row, and the 2nd header row would come from the 2nd datatable?
>>> In this case, i guess i would have to add a row manually above the
>>> header row (2nd dataset) which is the set of 1st data?
>>>
>>> if someone has ideas, code explaining it would be very helpful.
>>>

>>

>


 
Reply With Quote
 
Mortar
Guest
Posts: n/a
 
      11-23-2005
i goofed. My original post...i meant 2 header ROWS not columns. Sorry.

So the grid would look something like the following:

'', '', how many kids do you have?
firstname, lastname, no kids, 1 kid, 2 kids, more than 3 kids
Adam, Ant, 0, 0, 1, 0

so you can see, the top row...the question needs to span the possible
answers in the row below it. And the response would be a 1 or 0 (yes
or no)

so the top 2 rows are both headers, and then the 3rd and onward are
the data.



On Tue, 22 Nov 2005 23:13:07 -0800, "Ken Cox [Microsoft MVP]"
<> wrote:

>Here's a script that should get you going. Let us know?
>
>Ken
>Microsoft MVP [ASP.NET]
>
><%@ Page Language="VB" %>
><script runat="server">
> Dim dt As Data.DataTable
> Private Sub Page_Load _
> (ByVal sender As System.Object, _
> ByVal e As System.EventArgs) _
> Handles MyBase.Load
> DataGrid1.ShowHeader = True
> DataGrid1.DataSource = CreateDataSource()
> DataGrid1.DataBind()
> End Sub
> Private Sub DataGrid1_ItemDataBound _
> (ByVal sender As Object, _
> ByVal e As _
> System.Web.UI.WebControls.DataGridItemEventArgs) _
> Handles DataGrid1.ItemDataBound
> ' Have the first column header span
> ' two columns
> ' by Ken Cox Microsoft MVP [ASP.NET]
> If e.Item.ItemType = ListItemType.Header Then
> ' Declare variables
> Dim dgItem As DataGridItem
> Dim tcells As TableCellCollection
> Dim fcell As TableCell
> Dim scell As TableCell
> ' Get a reference to the header row item
> dgItem = e.Item
> ' Get a reference to the cells in the
> ' header row item
> tcells = e.Item.Cells
> ' Get a reference to the cell we want to
> ' span. In this case, the first cell
> fcell = e.Item.Cells(0)
> ' Set the text of the span cell
> fcell.Text = "This is the spanned cell"
> ' Set the columns to span to 2
> fcell.ColumnSpan = 2
> ' Get a reference to the second cell
> scell = e.Item.Cells(1)
> ' Remove the second cell because it will
> ' be replaced by the spanning column
> dgItem.Cells.Remove(scell)
> End If
> End Sub
> Function CreateDataSource() As ICollection
> ' Create sample data for the DataList control.
> dt = New Data.DataTable
> Dim dr As Data.DataRow
>
>
> ' Define the columns of the table.
> dt.Columns.Add(New Data.DataColumn("Student", GetType(String)))
> dt.Columns.Add(New Data.DataColumn("Subject", GetType(String)))
> dt.Columns.Add(New Data.DataColumn("Day", GetType(String)))
>
>
> ' Populate the table with sample values.
> dr = dt.NewRow
> dr(0) = "Ben"
> dr(1) = "English"
> dr(2) = "Thursday"
> dt.Rows.Add(dr)
> dr = dt.NewRow
> dr(0) = "Ben"
> dr(1) = "Geology"
> dr(2) = "Monday"
> dt.Rows.Add(dr)
> dr = dt.NewRow
> dr(0) = "Ben"
> dr(1) = "Physics"
> dr(2) = "Tuesday"
> dt.Rows.Add(dr)
> Dim dv As Data.DataView = New Data.DataView(dt)
> Return dv
> End Function
>
></script>
>
><html>
><head runat="server">
> <title>Untitled Page</title>
></head>
><body>
> <form id="form1" runat="server">
> <div>
> <asp:datagrid ID="DataGrid1" runat="server">
> </asp:datagrid>
> </div>
> </form>
></body>
></html>
>
>"Mortar" <> wrote in message
>news:. ..
>>i need a datagrid with 2 header columns. The top one might have 1
>> column spanning 5 columns of the header row below it.
>>
>> what is the best way to do this? Could i have 2 datatables...1 filling
>> the top row, and the 2nd header row would come from the 2nd datatable?
>> In this case, i guess i would have to add a row manually above the
>> header row (2nd dataset) which is the set of 1st data?
>>
>> if someone has ideas, code explaining it would be very helpful.
>>

>


 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
DataGrid header span 2 columns tshad ASP .Net 7 05-04-2012 03:50 PM
Header files with "header.h" or <header.h> ?? mlt C++ 2 01-31-2009 02:54 PM
datagrid - Header span over multiple columns sri_san@mailcity.com ASP .Net 1 01-26-2005 05:59 PM
Binded Datagrid Formatting columns or hiding columns ton ASP .Net Web Controls 2 02-11-2004 04:09 AM
Columns and Inherited Datagrid...Active Schema does not support columns rob thomson ASP .Net Datagrid Control 0 09-04-2003 03:09 PM



Advertisments
 



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57