Getting DataGrid Header information

G

GaryDean

I am writing a method in a component that gets passed a 1.1 Datagrid. The
datagrid's columns were created at run time meaning it has no columns
collection.

How can I access Header and Footer data in the grid?

It's not in the grid.items collection - only rows there. there is no
grid.header or grid.footer.
 
C

Cowboy \(Gregory A. Beamer\)

No, but there is a header row and a footer row and you can query row type.
 
G

Guest

Hi Gary,

C#
MyGrid.Controls[0].Controls[0] ' header
MyGrid.Controls[0].Controls[MyGrid.Controls[0].Controls.Count - 1] ' footer

Vb.Net
MyGrid.Controls(0).Controls(0) ' header
MyGrid.Controls(0).Controls(MyGrid.Controls(0).Controls.Count - 1) ' footer

Remeber to check if the ShowHeader and ShowFooter properties are set to true
before running the above code (plus the range check if
(MyGrid.Controls[0].Count > 0) ...

Hope this helps
 
G

GaryDean

Yes. that does it. Thanks much!

--
Regards,
Gary Blakely
Milosz Skalecki said:
Hi Gary,

C#
MyGrid.Controls[0].Controls[0] ' header
MyGrid.Controls[0].Controls[MyGrid.Controls[0].Controls.Count - 1] '
footer

Vb.Net
MyGrid.Controls(0).Controls(0) ' header
MyGrid.Controls(0).Controls(MyGrid.Controls(0).Controls.Count - 1) '
footer

Remeber to check if the ShowHeader and ShowFooter properties are set to
true
before running the above code (plus the range check if
(MyGrid.Controls[0].Count > 0) ...

Hope this helps

--
Milosz Skalecki
MCP, MCAD


GaryDean said:
I am writing a method in a component that gets passed a 1.1 Datagrid.
The
datagrid's columns were created at run time meaning it has no columns
collection.

How can I access Header and Footer data in the grid?

It's not in the grid.items collection - only rows there. there is no
grid.header or grid.footer.
 
S

Steven Cheng[MSFT]

Hi Gary,

Milosz's suggestion is directly access the DataGrid's Controls collection
to retrieve the Header and Footer child control, this does work though it
require us to have clear view of the DataGrid's control tree (you can view
page's control tree by turn on the page's output trace). However, I would
still recommend that we avoid this as much as possible since accessing
child control through index only is dangerous which may break between
different version changes.

BTW, are you using the DataGrid in ASP.NET 1.1 application or ASP.NET 2.0
application. If you're using it in ASP.NET 2.0 or plan to upgrade the
application to ASP.NET 2.0, you can consider the GridView control(specific
to ASP.NET 2.0) since it has naturally expose the "Footer" and "Header" as
two public properties (FooterRow and HeaderRow).

Please feel free to post here if you need any further help.


Sincerely,

Steven Cheng

Microsoft MSDN Online Support Lead


This posting is provided "AS IS" with no warranties, and confers no rights.
 
G

Guest

Steven,

I agree with you but my answer is based on his post (datagrid, asp.net 1.1,
reference is passed - so i quess you cannot do it in proper way i.e. in
itemcreated) :)

Regards
 
G

GaryDean

Hi Steven,
A couple years ago I wrote a component called PrintGrid
(http://www.deanblakely.com/PrintGrid.aspx). The component creates a
Crystal Report of any DataGrid. It worked for the 1.1 DataGrid but I wrote
it using the Columns collection (my mistake) so it would not work for
columns created at run time. I have given it away to several hunderd
developers that are probably still using it.

Now I am improving the component by (1) converting it so it will work for
columns created at run time for the DataGrid and (2) work for the new 2.0
GridView. All the developer has to do is call a method in my component,
passing either a DataGrid or a GridView object to print a report.

So, I understand that you are suggesting that using the controls collection
may not be a safe thing to do. Ok, but what is my alternative? How can I
get the Header and Footer text without using the Columns Collection and
without using the Controls Collection for the 1.1 DataGrid?

Later, when I'm working on the GridView it looks like it will be easier
since there are the two properties you mention. But, PrintGrid must provide
functionality for the 1.1 DataGrid for a long time because it will be used
for a long time.
 
S

Steven Cheng[MSFT]

Thanks for your followup Gary,

So I've got the point here that your helper method will accept both 1.1
DataGrid and 2.0 Gridview class instance. Thus, I agree that except
directly access the Controls collection, there is no other means to get
the header and footer control collection for 1.1 DataGrid.

Anyway, I still suggest you add more protection code (like check null
reference) in your code which access Header/Footer through index in
Controls collection.

Please feel free to let me know if there is anything else we can help.


Sincerely,

Steven Cheng

Microsoft MSDN Online Support Lead


This posting is provided "AS IS" with no warranties, and confers no rights.
 

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,744
Messages
2,569,483
Members
44,903
Latest member
orderPeak8CBDGummies

Latest Threads

Top