can't gain access to controls

B

bill yeager

I did some more debugging and found the following:

1) I placed the following code in the button event just
to see if I could cycle thru the datagrid control
collection:
<code>
Dim strhello As String
Dim myDataListItem As DataListItem
Dim myDatagridItem As DataGridItem
Dim myCheckBox As CheckBox
Dim myDataGrid As DataGrid

For Each myDataListItem In DataList2.Items
myDataGrid = myDataListItem.FindControl
("DataGrid3")
If Not IsNothing(myDataGrid) Then
For Each myDatagridItem In
myDataGrid.Items
myCheckBox = myDataGrid.FindControl
("Condition3")
If myCheckBox.Checked Then
strhello = "found!"
'do any processing that is needed
End If
Next
End If
Next
</code>

2) The line "For Each myDatagridItem In myDataGrid.Items"
produces the following:
- myDataGrid.Items.Count yields 4 (which is
correct since there are 4 rows in this child grid)
- myDatagridItem.Controls.Count yields 8 (which
is correct because there are 8 column controls).
According to this statement, I should be able to access
the columns inside this child grid.
- However, the statement "myCheckBox =
myDataGrid.FindControl("Condition3")" yields NOTHING... I
can't access any of the column controls inside this child
datagrid!

3) I'm able to get a listing on each of the items inside
this datagrid from item 0 to 7 as follows:
myDatagridItem.Controls.Item(7)
{System.Web.UI.WebControls.TableCell}
[System.Web.UI.WebControls.TableCell]:
{System.Web.UI.WebControls.TableCell}
BindingContainer:
{System.Web.UI.WebControls.DataGridItem}
ClientID: "DataList2__ctl1_Datagrid3__ctl2__ctl1"
Controls: {System.Web.UI.ControlCollection}
EnableViewState: True
ID: Nothing
NamingContainer:
{System.Web.UI.WebControls.DataGridItem}
Page: {ASP.BulkConditions_aspx}
Parent: {System.Web.UI.WebControls.DataGridItem}
Site: Nothing
TemplateSourceDirectory: "/LydianMDS"
UniqueID: "DataList2:_ctl1:Datagrid3:_ctl2:_ctl1"
Visible: True

Notice the ID above. EACH OF THESE ITEMS IS SET TO
NOTHING! That is the reason why I can't access the
controls in code..........

OK now... Since I have debugged this issue, I'm hoping
someone will be able to tell me WHY THOSE ITEMS HAVE AN
ID OF NOTHING... I'm expecting to find these items
programatcially, but can't. In my HTML below, you can
plainly see that the template columns have an ID
associated with them.

The following is the HTML of my entire datalist (parent)
and datagrid (child) controls.
<code>
<asp:DataList id=DataList2 style="Z-INDEX: 105; LEFT:
8px; POSITION: absolute; TOP: 192px" runat="server"
DataMember="spMSSASPGetDistinctOutstandingConditionsInInve
storReviewStep" DataKeyField="Lock_Number" DataSource="<%
# DsOutstandingCondsInInvestorRvw1 %>" Width="936px"
BackColor="White" BorderColor="#999999"
BorderStyle="None" BorderWidth="1px" CellPadding="3"
GridLines="Vertical" Height="544px">
<SelectedItemStyle Font-
Bold="True" ForeColor="White"
BackColor="#008A8C"></SelectedItemStyle>
<HeaderTemplate>
<P>Outstanding
BULK Conditions</P>
</HeaderTemplate>
<AlternatingItemStyle
BackColor="Gainsboro"></AlternatingItemStyle>
<FooterTemplate>
NO MORE
OUTSTANDING CONDITIONS
</FooterTemplate>
<ItemStyle
ForeColor="Black" BackColor="#EEEEEE"></ItemStyle>
<ItemTemplate>
<asp:label
id=Name2 runat="server" Text='<%# DataBinder.Eval
(Container, "DataItem.Name")%>'>
</asp:label>
<asp:label
id=LockNumber2 runat="server" Text='<%# DataBinder.Eval
(Container, "DataItem.Lock_Number")%>'>
</asp:label>
<asp:label
id=LoanID2 runat="server" Text='<%# DataBinder.Eval
(Container, "DataItem.LoanID")%>' Visible="False">
</asp:label>
<P>

<asp:Button id="btnWaive" runat="server"
Text="Waive All Conditions"
CommandName="Waive"></asp:Button>&nbsp;&nbsp;&nbsp;&nbsp;

<asp:Button id="btnNoWaive" runat="server"
Text="Don't Waive Any Condtions"
CommandName="NoWaive"></asp:Button></P>
<asp:DataGrid
id=Datagrid3 runat="server" AutoGenerateColumns="False"
BackColor="White" BorderColor="#999999"
BorderStyle="None" BorderWidth="1px" CellPadding="3"
GridLines="Vertical" datasource='<%#
Container.DataItem.CreateChildView
("spMSSASPGetDistinctOutstandingConditionsInInvestorReview
StepspMSSASPGetOutstandingConditionsInInvestorReviewStep")
%>'>

<SelectedItemStyle Font-Bold="True"
ForeColor="White" BackColor="#008A8C"></SelectedItemStyle>

<AlternatingItemStyle
BackColor="Gainsboro"></AlternatingItemStyle>

<ItemStyle ForeColor="Black"
BackColor="#EEEEEE"></ItemStyle>

<HeaderStyle Font-Bold="True" ForeColor="White"
BackColor="#000084"></HeaderStyle>

<FooterStyle ForeColor="Black"
BackColor="#CCCCCC"></FooterStyle>
<Columns>

<asp:TemplateColumn>

<ItemTemplate>

<asp:checkbox runat="server"
id="Condition3"></asp:checkbox>

</ItemTemplate>

</asp:TemplateColumn>

<asp:BoundColumn DataField="Name" ReadOnly="True"
HeaderText="Name"></asp:BoundColumn>

<asp:TemplateColumn HeaderText="LoanID">

<ItemTemplate>

<asp:label runat="server" id="LoanID3"
Text='<%# DataBinder.Eval(Container, "DataItem.LoanID") %

</asp:label>

</ItemTemplate>

</asp:TemplateColumn>

<asp:TemplateColumn HeaderText="Lock Number">

<ItemTemplate>

<asp:label runat="server"
id="LockNumber3" Text='<%# DataBinder.Eval
(Container, "DataItem.Lock_Number") %>'>

</asp:label>

</ItemTemplate>

</asp:TemplateColumn>

<asp:TemplateColumn HeaderText="Conditional Dtl
ID">

<ItemTemplate>

<asp:label runat="server"
id="ConditionDetailID3" Text='<%# DataBinder.Eval
(Container, "DataItem.ConditionDetailID") %>'>

</asp:label>

</ItemTemplate>

</asp:TemplateColumn>

<asp:BoundColumn DataField="ConditionID"
ReadOnly="True"
HeaderText="ConditionID"></asp:BoundColumn>

<asp:BoundColumn DataField="Description"
ReadOnly="True"
HeaderText="Description"></asp:BoundColumn>

<asp:BoundColumn DataField="Comment"
ReadOnly="True" HeaderText="Comment"></asp:BoundColumn>
</Columns>

<PagerStyle HorizontalAlign="Center"
ForeColor="Black" BackColor="#999999"
Mode="NumericPages"></PagerStyle>
</asp:DataGrid>
</ItemTemplate>
<FooterStyle
ForeColor="Black" BackColor="#CCCCCC"></FooterStyle>
<SeparatorTemplate>
------------------
----------------------------------------------------------
----------------------------------------------------------
--------------------
</SeparatorTemplate>
<HeaderStyle Font-
Bold="True" ForeColor="White"
BackColor="#000084"></HeaderStyle>
</asp:DataList>
</code>

Can someone PLEASE HELP ME WITH THIS. I have gone as FAR
AS I can go with it. I'm totally stuck at this point...

Why do those controls in the datagrid have an ID of
NOTHING (thereby not allowing me to access those
controls)...

Thanks,

Bill
 
B

bill yeager

The problem was that I wasn't doing the findcontrol
method down on the proper child control level!!! By
looping thru the following code, and playing around, I
was able to gain access to the child controls inside the
datagrid....

For all to see and share:
<code>
Dim myDataListItem As DataListItem
Dim myDatagridItem As DataGridItem
Dim myDataGrid As DataGrid
Dim myCheckBox As CheckBox
Dim lblLockNumber As Label
Dim lblConditionDetailID As Label
Dim lblLoanID As Label
Dim i As Int16

Try
For Each myDataListItem In DataList2.Items
myDataGrid = myDataListItem.FindControl
("DataGrid3")
If Not IsNothing(myDataGrid) Then
i = 0
For Each myDatagridItem In
myDataGrid.Items
myCheckBox =
myDatagridItem.Controls.Item(i).FindControl("Condition3")
If myCheckBox.Checked Then
lblLockNumber =
myDatagridItem.Controls.Item(i).FindControl("LockNumber3")
lblConditionDetailID =
myDatagridItem.Controls.Item(i).FindControl
("ConditionDetailID3")
lblLoanID =
myDatagridItem.Controls.Item(i).FindControl("LoanID3")
Dim drSave As
dsSaveCondition.dsSaveConditionRow =
DsSaveCondition1.dsSaveCondition.NewdsSaveConditionRow
drSave.Lock_Number =
lblLockNumber.Text
drSave.ConditionDetailID =
lblConditionDetailID.Text
drSave.LoanID = lblLoanID.Text

DsSaveCondition1.dsSaveCondition.Rows.Add(drSave)
End If
i += 1
Next
End If
Next
Catch ex As Exception
m_blnError = True
Response.Write("<script>alert('" & ex.Message
& "');</script>")
End Try
-----Original Message-----
I did some more debugging and found the following:

1) I placed the following code in the button event just
to see if I could cycle thru the datagrid control
collection:
<code>
Dim strhello As String
Dim myDataListItem As DataListItem
Dim myDatagridItem As DataGridItem
Dim myCheckBox As CheckBox
Dim myDataGrid As DataGrid

For Each myDataListItem In DataList2.Items
myDataGrid = myDataListItem.FindControl
("DataGrid3")
If Not IsNothing(myDataGrid) Then
For Each myDatagridItem In
myDataGrid.Items
myCheckBox = myDataGrid.FindControl
("Condition3")
If myCheckBox.Checked Then
strhello = "found!"
'do any processing that is needed
End If
Next
End If
Next
</code>

2) The line "For Each myDatagridItem In myDataGrid.Items"
produces the following:
- myDataGrid.Items.Count yields 4 (which is
correct since there are 4 rows in this child grid)
- myDatagridItem.Controls.Count yields 8 (which
is correct because there are 8 column controls).
According to this statement, I should be able to access
the columns inside this child grid.
- However, the statement "myCheckBox =
myDataGrid.FindControl("Condition3")" yields NOTHING... I
can't access any of the column controls inside this child
datagrid!

3) I'm able to get a listing on each of the items inside
this datagrid from item 0 to 7 as follows:
myDatagridItem.Controls.Item(7)
{System.Web.UI.WebControls.TableCell}
[System.Web.UI.WebControls.TableCell]:
{System.Web.UI.WebControls.TableCell}
BindingContainer:
{System.Web.UI.WebControls.DataGridItem}
ClientID: "DataList2__ctl1_Datagrid3__ctl2__ctl1"
Controls: {System.Web.UI.ControlCollection}
EnableViewState: True
ID: Nothing
NamingContainer:
{System.Web.UI.WebControls.DataGridItem}
Page: {ASP.BulkConditions_aspx}
Parent: {System.Web.UI.WebControls.DataGridItem}
Site: Nothing
TemplateSourceDirectory: "/LydianMDS"
UniqueID: "DataList2:_ctl1:Datagrid3:_ctl2:_ctl1"
Visible: True

Notice the ID above. EACH OF THESE ITEMS IS SET TO
NOTHING! That is the reason why I can't access the
controls in code..........

OK now... Since I have debugged this issue, I'm hoping
someone will be able to tell me WHY THOSE ITEMS HAVE AN
ID OF NOTHING... I'm expecting to find these items
programatcially, but can't. In my HTML below, you can
plainly see that the template columns have an ID
associated with them.

The following is the HTML of my entire datalist (parent)
and datagrid (child) controls.
<code>
<asp:DataList id=DataList2 style="Z-INDEX: 105; LEFT:
8px; POSITION: absolute; TOP: 192px" runat="server"
DataMember="spMSSASPGetDistinctOutstandingConditionsInInv e
storReviewStep" DataKeyField="Lock_Number" DataSource="<%
# DsOutstandingCondsInInvestorRvw1 %>" Width="936px"
BackColor="White" BorderColor="#999999"
BorderStyle="None" BorderWidth="1px" CellPadding="3"
GridLines="Vertical" Height="544px">
<SelectedItemStyle Font-
Bold="True" ForeColor="White"
BackColor="#008A8C"></SelectedItemStyle>
<HeaderTemplate>
<P>Outstanding
BULK Conditions</P>
</HeaderTemplate>
<AlternatingItemStyle
BackColor="Gainsboro"></AlternatingItemStyle>
<FooterTemplate>
NO MORE
OUTSTANDING CONDITIONS
</FooterTemplate>
<ItemStyle
ForeColor="Black" BackColor="#EEEEEE"></ItemStyle>
<ItemTemplate>
<asp:label
id=Name2 runat="server" Text='<%# DataBinder.Eval
(Container, "DataItem.Name")%>'>
</asp:label>
<asp:label
id=LockNumber2 runat="server" Text='<%# DataBinder.Eval
(Container, "DataItem.Lock_Number")%>'>
</asp:label>
<asp:label
id=LoanID2 runat="server" Text='<%# DataBinder.Eval
(Container, "DataItem.LoanID")%>' Visible="False">
</asp:label>
<P>

<asp:Button id="btnWaive" runat="server"
Text="Waive All Conditions"
CommandName="Waive"></asp:Button>

<asp:Button id="btnNoWaive" runat="server"
Text="Don't Waive Any Condtions"
CommandName="NoWaive"></asp:Button></P>
<asp:DataGrid
id=Datagrid3 runat="server" AutoGenerateColumns="False"
BackColor="White" BorderColor="#999999"
BorderStyle="None" BorderWidth="1px" CellPadding="3"
GridLines="Vertical" datasource='<%#
Container.DataItem.CreateChildView
("spMSSASPGetDistinctOutstandingConditionsInInvestorReview
StepspMSSASPGetOutstandingConditionsInInvestorReviewStep"
)
%>'>

<SelectedItemStyle Font-Bold="True"
ForeColor="White"
 

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,769
Messages
2,569,578
Members
45,052
Latest member
LucyCarper

Latest Threads

Top