Re: How to quickly find control in DataGrid...

Mark Brackett <[email protected]> Thu, 18 Oct 2007 10:01:46 -0400
Newsgroups gmane.comp.windows.devel.dotnet.web
Message-ID <[email protected]>
Yeah - you can find the first instance and backtrack through
Controls.IndexOf to find the appropriate indices. Something like:

DataGridItemCollection oItems = this.dataGrid.Items;

// Find location of table - assume we know the cell it's in
const int CELL_INDEX = 0;
HtmlTable table = (HtmlTable)
oItems[0].Cells[CELL_INDEX].FindControl("table");
int tableIndex = oItems[0].Cells[CELL_INDEX].Controls.IndexOf(table);

// Find location of our checkRow        
HtmlTableRow checkRow = (HtmlTableRow) table.FindControl("checkRow");
int checkRowIndex = table.Controls.IndexOf(checkRow);

// Now we can index into .Controls instead of using FindControl
for (int i = 0; i < oItems.Count; i++) {
        checkRow = (HtmlTableRow)
oItems[i].Cells[CELL_INDEX].Controls[tableIndex].Controls[checkRowIndex]
;
}

That being said - wouldn't CheckBoxList and SelectedIndexChanged work?

--MB

> -----Original Message-----
> From: Discussion of building .NET applications targeted for the Web
> [mailto:[email protected]] On Behalf Of Gyorgy Bozoki
> Sent: Tuesday, October 16, 2007 12:39 AM
> To: [email protected]
> Subject: [DOTNET-WEB] How to quickly find control in DataGrid...
> 
> Hi all,
> 
> I have a DataGrid on a web page (ASP.Net 2.0) and I need to go through
> each
> DataGridItem when a button is pressed on the page. The grid has 5
> columns
> and one of the columns has an HtmlTable control with a single row and
> 10
> columns and each column contains a CheckBox control.
> 
> When the button is clicked on the page, I go through the grid (100
> rows, for
> example) and I need to access each checkbox to see if it changed.
Right
> now
> this is what I do:
> 
> 
> DataGridItem oItem;
> DataGridItemCollection oItems;
> CheckBox chkCheckBox;
> ...
> for ( int i = 0, lCount = oItems.Count; i < lCount; i++ )
> {
>     oItem = oItems[i];
> 
>     chkCheckBox = oItem.FindControl ( "ControlName" );
>     if ( chkCheckBox != null )
>     {
>         ...
>     }
> }
> 
> 
> I assume that each row in the DataGrid has the same order of these
> checkboxes (since it's generated from the HTML designer template), so
I
> was
> wondering if it was possible to somehow cache the control indices for
> my 10
> checkboxes, since I found that FindControl() is a very expensive call.
> (Checked in Reflector.)
> 
> The problem is that all these controls are the children of the
> immediate
> HTML table cell in which they're placed, not the DataGridItem, so
using
> an
> index instead of the name-based lookup seems out of question (all
> checkboxes
> have a 0 index, because they're the only controls in each table cell.)
> 
> Is there anything I could do to do away with the unnecessary lookups
> and
> recursive string matches of FindControl? I feel like I'm missing
> something.
> 
> Thanks,
> Gyorgy Bozoki
> 
> ===================================
> This list is hosted by DevelopMentor(r)  http://www.develop.com
> 
> View archives and manage your subscription(s) at
> http://discuss.develop.com

===================================
This list is hosted by DevelopMentorĀ®  http://www.develop.com

View archives and manage your subscription(s) at http://discuss.develop.com