Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > ASP .Net > Manipulating a User Control from another User Control

Reply
Thread Tools

Manipulating a User Control from another User Control

 
 
Tom Rowton
Guest
Posts: n/a
 
      08-01-2003
This one has me a bit confused and I'm not finding what I
need in the MSDN or by searching these forums, so here
goes...


I have a rather large, complex code-in-page WebForm
(don't ask) and a section of that Form is 4 or 5
ASPanels pretending to be a set of Tabs, each with its
own section of the form.

In order to simplify managing this page, since code-
behind is not an option (don't ask, not my fault), I
thought I had the solution...

I would convert each Panel into a User Control.
The problem is that the panels usually depend on at least
one Form Control from at least one other Panel.

I already know about RaiseBubbleEvent() and OnBubbleEvent
() and have used them elsewhere, but they only work going
UP the container heirarchy.

I need to :
1 - (partially) handle an event in the UserControls
(panels), then (partially handle the same event in
ANOTHER UserControl(panel) on the same form/page.

2 - handle an event in a UserControl(panel) BUT be able
to retrieve values from form fields(Controls) in OTHER
UserControls(panels) to help determine how to handle the
event.

3 - (partially) handle an event in the Form(aspx)
depending on values of form controls in the UserControls

4 - manipulate values of form controls in the
UserControls


Like I said, I already know how to Bubble events, but
that only goes up.
The part I am missing is how to "Elbbub" events (bubble,
backwards) or manipulate data in child objects.

The trick is, this is all Code-in-Page and nothing will
convince those in control to return to Code Behind.

Anyone know how to do what I want/need to do?

I have a set of aspx/ascx pages that I can email or ftp
for anyone interested.
 
Reply With Quote
 
 
 
 
Kevin Spencer
Guest
Posts: n/a
 
      08-01-2003
Okay, let me see if I understand you correctly. You've got an Event Handler
for one UserControl that needs to do something with another UserControl,
right? It looks to me like your error is in using Page.FindControl(...). The
FindControl() method of a Control looks for controls in that Control's
Controls Collection (was that a confusing sentence or what?). Your
UserControls are not in the Page's Controls Collection; they are in your
Form's Controls collection. Does that help?

--
HTH,

Kevin Spencer
Microsoft MVP
..Net Developer
http://www.takempis.com
Complex things are made up of
lots of simple things.

"Tom Rowton" <(E-Mail Removed)> wrote in message
news:6bd801c3585b$7613c060$(E-Mail Removed)...
> Ok, I hope this works. I'll just post entire files, and
> separate them by a line of dashes.
> MyCaseSub.ascx was trying to get the value of
> MyCaseMain.ascx's label, but it wouldn't work. I could
> get the ID of the Case:MainPanel usercontrol, but I can't
> access the Property Method _UNLESS_ I bubble the event to
> MyCase.aspx and let MyCase.aspx call the Get.
>
> Clearly, this is a matter of not understanding the object
> model, but I can't seem to find anyone to tell me how to
> do it without Bubbling, or I'm asking in an unclear
> manner.
>
> TIA,
> Tom
>
> MyCase.aspx
> ------------------------
> <%@ Register TagPrefix="Case" TagName="MainPanel"
> Src="MyCaseMain.ascx" %>
> <%@ Register TagPrefix="Case" TagName="SubPanel"
> Src="MyCaseSub.ascx" %>
> <%@ Register TagPrefix="Case" TagName="SubPanel2"
> Src="MyCaseSub2.ascx" %>
> <%@ Import Namespace = "System.Web.UI.WebControls" %>
> <%@ Import Namespace = "System.Data.SqlTypes" %>
> <%@ Import Namespace = "System.Data.SqlClient" %>
> <%@ Import Namespace = "System.Drawing" %>
> <%@ Import Namespace = "System.Data" %>
> <%@ Import Namespace = "System.Web" %>
> <%@ Import Namespace = "System" %>
> <%@ Page Language="vb" Inherits="System.Web.UI.Page" %>
> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0
> Transitional//EN">
> <HTML>
> <HEAD>
> <title>User Controls Test Page</title>
> <script language="VB" runat="server">
>
> Protected Overrides Function OnBubbleEvent(ByVal
> source As Object, ByVal args As System.EventArgs) As
> Boolean
> If source.GetType.Equals (GetType
> (Button)) Then
> Dim oButton As Button = source
> Select Case oButton.ID
> Case "btnMainButton"
> 'Change text of
> Subsection Label
>
> SubPanel1.SubLabelValue = "Changed by Main Panel
> via RaiseBubbleEvent()"
> Case "btnSubButton"
> 'Change text of
> Main Label
>
> MainPanel1.MainLabelValue = "Changed by Sub Panel
> via RaiseBubbleEvent()"
> Case "btnGetMain"
> dim temp as
> string = MainPanel1.MainLabelValue
>
> SubPanel1.lblParentValue = temp
> Case "btnSub2Button"
> 'Change text of
> Main Label and Subsection Label
>
> SubPanel1.SubLabelValue = "**Changed by Sub2
> Panel via RaiseBubbleEvent()**"
>
> MainPanel1.MainLabelValue = "**Changed by Sub2
> Panel via RaiseBubbleEvent()**"
> End Select
> End If
> End Function
>
> sub btnReset_Click(sender as Object, e as
> EventArgs)
> SubPanel1.SubLabelValue = "Sub Panel"
> SubPanelB1.Sub2LabelValue = "Sub2 Panel"
> MainPanel1.MainLabelValue = "Main Panel"
> end sub
>
> Sub CaseTabBtn_Click(sender As Object, e As
> System.EventArgs)
> ' CasePanel.Visible = True
> ' AssignmentPanel.Visible = False
> end sub
> Sub AssignmentTabBtn_Click(sender As Object, e As
> System.EventArgs)
> ' CasePanel.Visible = False
> ' AssignmentPanel.Visible = True
> end sub
> sub page_load(sender As Object, e As System.EventArgs)
> if not page.ispostback
> end if
> end sub
> </script>
> <META content="True" name="vs_showGrid">
> <META content="Microsoft Visual
> Studio.NET 7.0" name="GENERATOR">
> <META content="Visual Basic 7.0"
> name="CODE_LANGUAGE">
> <META content="JavaScript"
> name="vs_defaultClientScript">
> <META
> content="http://schemas.microsoft.com/intellisense/ie5"
> name="vs_targetSchema">
> </HEAD>
> <body runat=server>
> <FORM id="Form1" method="post"
> encType="multipart/form-data" runat="server">
> <asp:literal id="litScript"
> runat="server" EnableViewState="False"></asp:literal>
> <aspanel id="MainPanel"
> runat="server" borderwidth="1" borderstyle="ridge"
> backcolor="PaleGoldenrod" HorizontalAlign="Center">&nbsp;
> <CASE:MainPanel
> id="MainPanel1" runat="server"
> NAME="MainPanel1"></CASE:MainPanel>
> </aspanel>
> <P></P>
>
> <asp:linkbutton id="CaseTabBtn"
> onclick="CaseTabBtn_Click" runat="server"
> BackColor="White" BorderWidth="1"
> BorderColor="Goldenrod">Case</asp:linkbutton>&nbsp;&nbsp;
> <asp:linkbutton
> id="AssignmentTabBtn" onclick="AssignmentTabBtn_Click"
> runat="server" BackColor="White" BorderWidth="1"
> BorderColor="Goldenrod">Assignment</asp:linkbutton>&nbsp;&
> nbsp;
>
> <aspanel id="CasePanel"
> runat="server" borderwidth="1" borderstyle="ridge"
> backcolor="PaleGoldenrod" HorizontalAlign="Center">&nbsp;
> <CASE:SubPanel
> id="SubPanel1" runat="server"
> NAME="SubPanel1"></CASE:SubPanel>
> </aspanel>
>
> <aspanel id="AssignmentPanel"
> runat="server" borderwidth="1" borderstyle="ridge"
> backcolor="PaleGoldenrod" HorizontalAlign="Center">&nbsp;
> <CASE:SubPanel2
> id="SubPanelB1" runat="server"
> NAME="SubPanelB1"></CASE:SubPanel2>
> </aspanel>
> <asp:button id="btnReset"
> onclick="btnReset_Click" runat="server" Text="Reset all
> Panels"></asp:button>
> </FORM>
> </BODY>
> </HTML>
>
> ----------------------
> MyCaseMain.ascx
> ----------------------
> <%@ Control Language="vb" AutoEventWireup="false"
> Inherits="System.Web.UI.UserControl"%>
> <%@ Import Namespace = "System.Web.UI.WebControls" %>
> <%@ Import Namespace = "System.Data.SqlClient" %>
> <%@ Import Namespace = "System.Drawing" %>
> <%@ Import Namespace = "System.Data" %>
> <%@ Import Namespace = "System.Web" %>
> <%@ Import Namespace = "System" %>
> <script language="VB" runat="server">
> Property MainLabelValue() as String
> Get
> Return lblMainLabel.Text
> end Get
> Set
> lblMainLabel.Text = value
> end Set
> end Property
> sub btnMainButton_Click(sender as Object, e as
> EventArgs)
> RaiseBubbleEvent(sender, e)
> end sub
> </script>
> <hr>
> Main Section<BR>
> <asp:Label id="lblMainLabel" runat="server"
> Visible="True">Main Label(MyCaseMain.ASCX)
> </asp:Label><BR><BR>
> <asp:button id="btnMainButton"
> onclick="btnMainButton_Click" runat="server" Text="Change
> Subsection Panel"></asp:button>
> <hr>
>
> -----------------
> MyCaseSub.ascx
> -----------------
>
> <%@ Control Language="vb" AutoEventWireup="false" %>
> <%@ Import Namespace = "System.Web.UI.WebControls" %>
> <%@ Import Namespace = "System.Data.SqlClient" %>
> <%@ Import Namespace = "System.Drawing" %>
> <%@ Import Namespace = "System.Data" %>
> <%@ Import Namespace = "System.Web" %>
> <%@ Import Namespace = "System" %>
> <script language="VB" runat="server">
> Property SubLabelValue() as String
> Get
> Return lblSubLabel.Text
> end Get
> Set
> lblSubLabel.Text = value
> end Set
> end Property
> Property lblParentValue() as String
> Get
> Return lblParent.Text
> end Get
> Set
> lblParent.Text = value
> end Set
> end Property
> sub btnSubButton_Click(sender as Object, e as
> EventArgs)
> RaiseBubbleEvent(sender, e)
> end sub
> sub btnGetMain_Click(sender as Object, e as
> EventArgs)
> RaiseBubbleEvent (sender, e)
> ' Dim MyControl as Control =
> Page.FindControl("MainPanel1")
> ' if (not MyControl is Nothing) then
> ' lblParent.Text =
> MyControl.MainLabelValue()
> ' else
> ' lblParent.Text = "MainPanel1 not
> found"
> ' end if
> end sub
> </script>
> <hr>
> Sub Section<BR>
> <asp:Label id="lblSubLabel" runat="server"
> Visible="True">Sub Label(MyCaseSub.ASCX)</asp:Label><BR>
> Main Panel's ID:<asp:Label id="lblParent"
> runat="server" Visible="True"></asp:Label><BR>
> <asp:button id="btnSubButton"
> onclick="btnSubButton_Click" runat="server" Text="Change
> Main section Panel"></asp:button>
> <asp:button id="btnGetMain"
> onclick="btnGetMain_Click" runat="server" Text="Get Main
> Panel label"></asp:button>
> <hr>
>
> --------------



 
Reply With Quote
 
 
 
 
Tom Rowton
Guest
Posts: n/a
 
      08-01-2003
>Form's Controls collection. Does that help?
It's good info to have, but doesn't really fix my
problem.

in MyCaseSub.ascx where I have commented out
---------------------------------------------
Dim MyControl as Control =
Page.FindControl("MainPanel1")
if (not MyControl is Nothing) then
lblParent.Text =
MyControl.MainLabelValue()
else
lblParent.Text = "MainPanel1 not
found"
end if
------------------------------------------------

The "else" never happens.
MyControl is _never_ Nothing.
I can print the ID out just fine.
But I am unable to access the "MainLabelValue()" Property
GET - which works just fine from the bubbled event in
MyCase.aspx.

To sum up, I know that Page.FindControl() finds the
usercontrol, because I can print out the ID I've given it
in the HTML, but I cannot access the Property I've given
in the script block of the UserControl.

Or did I just misunderstand your point?

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Manipulating a Third-Party Java Application from another Java Application travis.troyer@gmail.com Java 6 04-10-2007 05:43 AM
Need help manipulating a table control gg77 ASP .Net Web Controls 0 08-16-2005 07:19 PM
How to access: a page from a User control, and another User controlfrom another one? qwerty ASP .Net 3 09-30-2004 05:32 PM
Manipulating user input agent349 C++ 6 04-09-2004 05:58 PM
Manipulating control in one frame from another frame, how? Søren M. Olesen ASP .Net 0 11-13-2003 05:37 PM



Advertisments