Filtering data and adding headers within same datagrid

T

Tr

Hello,

Posted this over on the ADO.net group but it belongs here.

I am working on a ASP page with a datagrid that has 5 columns that I bind
to
a datatable which is filled via the ReadXml parser.
Once this data is there I need a way to:
1) Segregate each unique group of data that has the same value in one of
the
fields.
(ie DataRow dr["col1"] = 'A' - A data, DataRow dr["col1"] = 'B' - B
data, etc )

For the A data the data grid would have headers H1, H2, H3, H4, H5
data: d1
d2 d3 d4 d5
For the B data the data grid would have H1,
H5

d1 d5
Something different for C data H1, H3,
H5

d1 d3 d5

This must occur within the same datagrid D1.
I have figured out how to get the unique headers into the datagrid by
checking the data from the dataset but getting that
special label row in the right place along with its associated data escapes
me.

2) Ensure that I capture the first instance of B data in col1 and insert
that label row into the grid.

I have already used unique datagrid for each set of data but that wasn't
pretty enough for the customer because the columns didn't
line up from one grid to the next.

Any Help is appreciated,
Trez

PS. Using C#
 
E

Eidolon

Hi,

I have done this several times recently, and it works pretty well. Here is
the code i use. I picked it up from some site, and then just adapted it to
our projects. It is VB though. Most of it shouldnt be too hard to convert to
C#, but there are a few keywords and things i wasnt sure of so i figured id
leave that for someone who is more familiar with C# rather than messing it
up by accident.

HTH.

Private Sub grdHours_ItemCreated(ByVal sender As Object, ByVal e As
System.Web.UI.WebControls.DataGridItemEventArgs) Handles
grdHours.ItemCreated
Dim i As DataGridItem = e.Item
Static lastproject As String

Select Case i.ItemType
Case ListItemType.Header
lastproject = ""
Case ListItemType.Item, ListItemType.AlternatingItem
Dim curproject As String, curprojectnum As String
If Binding Then
Dim dr As DataRow = CType(i.DataItem, DataRowView).Row
curproject = dr("PROJECT")
curprojectnum = dr("PROJECTNUM")
Else
curproject = i.Cells(10).Text
curprojectnum = i.Cells(11).Text
End If

If curproject <> lastproject Then
Dim grd As DataGrid = sender
Dim c As TableCell, di As DataGridItem

c = New TableCell
With c
.ColumnSpan = grd.Columns.Count
.BackColor = ColorTranslator.FromHtml("#B0C4DE")
.ForeColor = ColorTranslator.FromHtml("#553E13")
.Font.Bold = True
.Style.Add("FONT-VARIANT", "SMALL-CAPS")
.Style.Add("PADDING-LEFT", "3px")
.Style.Add("BORDER-RIGHT", "#A5A6A5 1px solid")
.Style.Add("BORDER-BOTTOM", "#A5A6A5 2px solid")

.Text = curproject & " [<label style='color: Navy'>"
& curprojectnum & "</label>]"
.Text &= " - <label style='font-weight: normal;
font-size: 8pt; color: black; font-variant: normal;'>" &
CStr(NVL(dbObj.ExecuteScalar("SELECT PROJECT_DESC1 FROM PROJECTS WHERE
PROJECT_NO = " & curprojectnum), "")).ToLower & "</label>"
End With
di = New DataGridItem(i.ItemIndex + 1, 0,
ListItemType.Item)
di.Cells.Add(c)
CType(grd.Controls(0), Table).Rows.Add(di)

lastproject = curproject
End If
End Select
End Sub
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,768
Messages
2,569,574
Members
45,048
Latest member
verona

Latest Threads

Top