How Access Controls In A DataGrid Footer

T

Tim Burda

OK - I am prepared for everyone who will tell me this is a hack and
bad idea; however, this is the only way I could find to solve this
problem, and it seems like other people are having similiar problems,
so I thought I would post my solution anyway.

I have a DataGrid with controls (TextBox, DropDownList, etc.) in the
Footer. I am using the Footer as entry area for new records. I need to
enable/disable controls in the Footer based on the state of a dropdown
list control (in the Footer). It appears that you can only access the
"Footer" item in the DataGrid in the DataGrid events "ItemCreated" &
"ItemDataBound".

The ItemDataBound event fires only when a DataGrid.DataBind() method
is invoked. This is not always possible as I want to re-bind the data
only when necessary, and not always when the value in the DropDownList
changes

The ItemCreated event fires each item the page is loaded and items are
created in the datagrid; however, the controls in the footer don't
seem to be created when this event is fired.

But, what you can you with the ItemCreated event is this:

delcare a variable (of page level scope):

private DataGridItem mitmFooter = null;

trap the ItemCreated event and then do the following:

if (e.Item.ItemType == ListItemType.Footer)
{
mitmFooter = e.Item;
}

With this reference, you can access the footer in other areas of the
code. In my case, I use the variable mitmFooter in the
"SelectedIndexChange" event for the dropdown list in the footer with
code similiar to this:

ddlSegmentType = (DropDownList)
mitmFooter.FindControl("ddlSegmentTypeFooter");

Word of caution: In order for this technique to be successful, you
need to verify that the order the events are firing in are correct
(i.e. the ItemCreated event fires before your event).

If you need more info or have questions, my email is posted.

Happy Coding -

Tim Burda
 
C

Craig Grell

Thank you

This is just what I was looking for and so far no problems.



(e-mail address removed) (Tim Burda) wrote in
 
T

TiSch

Tim said:
OK - I am prepared for everyone who will tell me this is a hack and
bad idea; however, this is the only way I could find to solve this
problem, and it seems like other people are having similiar problems,
so I thought I would post my solution anyway.

I have a DataGrid with controls (TextBox, DropDownList, etc.) in the
Footer. I am using the Footer as entry area for new records. I need to
enable/disable controls in the Footer based on the state of a dropdown
list control (in the Footer). It appears that you can only access the
"Footer" item in the DataGrid in the DataGrid events "ItemCreated" &
"ItemDataBound".

The ItemDataBound event fires only when a DataGrid.DataBind() method
is invoked. This is not always possible as I want to re-bind the data
only when necessary, and not always when the value in the DropDownList
changes

The ItemCreated event fires each item the page is loaded and items are
created in the datagrid; however, the controls in the footer don't
seem to be created when this event is fired.

But, what you can you with the ItemCreated event is this:

delcare a variable (of page level scope):

private DataGridItem mitmFooter = null;

trap the ItemCreated event and then do the following:

if (e.Item.ItemType == ListItemType.Footer)
{
mitmFooter = e.Item;
}

With this reference, you can access the footer in other areas of the
code. In my case, I use the variable mitmFooter in the
"SelectedIndexChange" event for the dropdown list in the footer with
code similiar to this:

ddlSegmentType = (DropDownList)
mitmFooter.FindControl("ddlSegmentTypeFooter");

Word of caution: In order for this technique to be successful, you
need to verify that the order the events are firing in are correct
(i.e. the ItemCreated event fires before your event).

If you need more info or have questions, my email is posted.

Happy Coding -

Tim Burda



Hello,

there is another way to access the footer:

Public Shared Function getFooter(ByVal grid As DataGrid) As
DataGridItem
Dim footer As Control
For Each ctrl As WebControl In grid.Controls(0).Controls
'loop DataGridTable
If TypeOf ctrl Is System.Web.UI.WebControls.DataGridItem
Then
Dim item As DataGridItem = DirectCast(ctrl,
DataGridItem)
Select Case item.ItemType
Case ListItemType.Footer
Return item
End Select
End If
Next
End Function

Regards,
Tim
 

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

Forum statistics

Threads
473,995
Messages
2,570,230
Members
46,818
Latest member
Brigette36

Latest Threads

Top