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.
>>>
>>
>