Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > ASP .Net > ASP .Net Building Controls > Custom Control with Child Controls

Reply
Thread Tools

Custom Control with Child Controls

 
 
Nitin
Guest
Posts: n/a
 
      10-11-2003
Hi,

I have created 2 custom control : MyControl and C1
I have following tags in my aspx file :
<myCtrl:MyControl runat=server>
<myCtrl:C1 Text="A" runat=server />
<myCtrl:C1 Text="B" runat=server />
</myCtrl:MyControl>

Now I want to render the output in the following manner :
<TABLE>
<TR>
<TD>A</TD>
</TR>
<TR>
<TD>B</TD>
</TR>
</TABLE>

Custom control C1 will render each row (<tr>) which I am
able to do by having a property named "Text" inside C1 and
overriding the Render method.

Custom control MyControl should start a Table and also end
the table when all the child controls are rendered.

I am not able to close the table after all the child
controls are rendered.
I tried having a Custom ControlBuilder Class and
overriding some methods but that is also not working.

This thing works with asp.net controls such as :

<asp:LinkButton ID="lb1" Runat=server>
LinkButton <br>
<asp:Label ID="l1" Runat=server>one</asp:Label>
<br>
<asp:Label ID="l2" Runat=server>two</asp:Label>
<br>
End
</asp:LinkButton>

The output when I see source :

<a id="lb1" href="javascript:__doPostBack('lb1','')">
LinkButton <br>
<span id="l1">one</span><br>
<span id="l2">two</span><br>
End
</a>

My problem in my control is how to get this last "</a>"
tag.

Kindly help.

Regards,
Nitin

 
Reply With Quote
 
 
 
 
Teemu Keiski
Guest
Posts: n/a
 
      10-11-2003
How have you implemented the controls?

Does MyControl allow child controls (i.e is it derived from Control or
WebControl and if WebControl then has it design-time attributes applid
namely ParseChildren(false) and PersistChildren(true) so that it supports
content between its tags as child controls)

--
Teemu Keiski
MCP, Microsoft MVP (ASP.NET), AspInsiders member
ASP.NET Forum Moderator, AspAlliance Columnist

"Nitin" <(E-Mail Removed)> wrote in message
news:080901c38fe6$5171d310$(E-Mail Removed)...
> Hi,
>
> I have created 2 custom control : MyControl and C1
> I have following tags in my aspx file :
> <myCtrl:MyControl runat=server>
> <myCtrl:C1 Text="A" runat=server />
> <myCtrl:C1 Text="B" runat=server />
> </myCtrl:MyControl>
>
> Now I want to render the output in the following manner :
> <TABLE>
> <TR>
> <TD>A</TD>
> </TR>
> <TR>
> <TD>B</TD>
> </TR>
> </TABLE>
>
> Custom control C1 will render each row (<tr>) which I am
> able to do by having a property named "Text" inside C1 and
> overriding the Render method.
>
> Custom control MyControl should start a Table and also end
> the table when all the child controls are rendered.
>
> I am not able to close the table after all the child
> controls are rendered.
> I tried having a Custom ControlBuilder Class and
> overriding some methods but that is also not working.
>
> This thing works with asp.net controls such as :
>
> <asp:LinkButton ID="lb1" Runat=server>
> LinkButton <br>
> <asp:Label ID="l1" Runat=server>one</asp:Label>
> <br>
> <asp:Label ID="l2" Runat=server>two</asp:Label>
> <br>
> End
> </asp:LinkButton>
>
> The output when I see source :
>
> <a id="lb1" href="javascript:__doPostBack('lb1','')">
> LinkButton <br>
> <span id="l1">one</span><br>
> <span id="l2">two</span><br>
> End
> </a>
>
> My problem in my control is how to get this last "</a>"
> tag.
>
> Kindly help.
>
> Regards,
> Nitin
>



 
Reply With Quote
 
 
 
 
Nitin
Guest
Posts: n/a
 
      10-12-2003
Hi Teemu,

Here is my code for MyControl and C1

using System;
using System.Web;
using System.Data;
using System.Xml;
using System.Text;
using System.Collections;
using System.Diagnostics;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;
using System.Runtime.Serialization;

namespace Controls.Common
{
/// <summary>
/// Summary description for MyControl.
/// </summary>
public class MyControl : Control
{
public MyControl()
{
}

#region Properties
private string _HeaderText;
public string HeaderText
{
get
{
return _HeaderText;
}
set
{
_HeaderText = value;
}
}
#endregion
}
}


using System;
using System.Web;
using System.Data;
using System.Xml;
using System.Text;
using System.Collections;
using System.Diagnostics;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;
using System.Runtime.Serialization;

namespace Controls.Common
{
/// <summary>
/// Summary description for C1.
/// </summary>
public class C1 : Control
{
public C1()
{
}

#region Properties
private string _Text;
public string Text
{
get
{
return _Text;
}
set
{
_Text = value;
}
}
#endregion

#region Protected Methods
protected override void Render
(HtmlTextWriter output)
{
output.Write("<tr>");
output.Write("<td>");
output.Write("<A HREF=\"#\" id=\"A1
\" onclick=\"return f_Change('A1');\" CLASS=\"Link\">");
output.Write(this._Text);
output.Write("</A>");
output.Write("</td>");
output.Write("</tr>");
}
#endregion

}
}


and aspx file code :

<%@ Register TagPrefix="myCtrl"
Namespace="Controls.Common" Assembly="ControlLibrary" %>


<form id="TestMyControl" method="post" runat="server">
<myCtrl:MyControl runat=server >
<myCtrl:C1 Text="A" runat=server />
<myCtrl:C1 Text="B" runat=server />
</myCtrl:MyControl>
</form>


and output I get is (view source):


<form name="TestMyControl" method="post"
action="TestMyControl.aspx" id="TestMyControl">
<input type="hidden" name="__VIEWSTATE"
value="dDwxNTc2NTg4MTgzOzs+VpGy0tGPOz32SgraT7FLb4y Xk7s=" />

<tr><td><A HREF="#" id="A1" onclick="return f_Change
('A1');" CLASS="Link">A</A></td></tr>
<tr><td><A HREF="#" id="A1" onclick="return f_Change
('A1');" CLASS="Link">B</A></td></tr>

</form>



I just want my Parent control (MyControl) to start a table
tag and close a table tag. I mean the parent control
should start some html tags and after all the child
controls have finished rendering then the parent control
shouls close all the tags which it started.


Kindly guide me how to do this.

Regards,
Nitin



>-----Original Message-----
>How have you implemented the controls?
>
>Does MyControl allow child controls (i.e is it derived

from Control or
>WebControl and if WebControl then has it design-time

attributes applid
>namely ParseChildren(false) and PersistChildren(true) so

that it supports
>content between its tags as child controls)
>
>--
>Teemu Keiski
>MCP, Microsoft MVP (ASP.NET), AspInsiders member
>ASP.NET Forum Moderator, AspAlliance Columnist
>
>"Nitin" <(E-Mail Removed)> wrote in message
>news:080901c38fe6$5171d310$(E-Mail Removed)...
>> Hi,
>>
>> I have created 2 custom control : MyControl and C1
>> I have following tags in my aspx file :
>> <myCtrl:MyControl runat=server>
>> <myCtrl:C1 Text="A" runat=server />
>> <myCtrl:C1 Text="B" runat=server />
>> </myCtrl:MyControl>
>>
>> Now I want to render the output in the following

manner :
>> <TABLE>
>> <TR>
>> <TD>A</TD>
>> </TR>
>> <TR>
>> <TD>B</TD>
>> </TR>
>> </TABLE>
>>
>> Custom control C1 will render each row (<tr>) which I am
>> able to do by having a property named "Text" inside C1

and
>> overriding the Render method.
>>
>> Custom control MyControl should start a Table and also

end
>> the table when all the child controls are rendered.
>>
>> I am not able to close the table after all the child
>> controls are rendered.
>> I tried having a Custom ControlBuilder Class and
>> overriding some methods but that is also not working.
>>
>> This thing works with asp.net controls such as :
>>
>> <asp:LinkButton ID="lb1" Runat=server>
>> LinkButton <br>
>> <asp:Label ID="l1" Runat=server>one</asp:Label>
>> <br>
>> <asp:Label ID="l2" Runat=server>two</asp:Label>
>> <br>
>> End
>> </asp:LinkButton>
>>
>> The output when I see source :
>>
>> <a id="lb1" href="javascript:__doPostBack('lb1','')">
>> LinkButton <br>
>> <span id="l1">one</span><br>
>> <span id="l2">two</span><br>
>> End
>> </a>
>>
>> My problem in my control is how to get this last "</a>"
>> tag.
>>
>> Kindly help.
>>
>> Regards,
>> Nitin
>>

>
>
>.
>

 
Reply With Quote
 
Teemu Keiski
Guest
Posts: n/a
 
      10-12-2003
In the MyControl's Render call RenderChildren there where you want child
controls to be rendered.

--
Teemu Keiski
MCP, Microsoft MVP (ASP.NET), AspInsiders member
ASP.NET Forum Moderator, AspAlliance Columnist


"Nitin" <(E-Mail Removed)> wrote in message
news:043e01c39097$f2057050$(E-Mail Removed)...
> Hi Teemu,
>
> Here is my code for MyControl and C1
>
> using System;
> using System.Web;
> using System.Data;
> using System.Xml;
> using System.Text;
> using System.Collections;
> using System.Diagnostics;
> using System.Web.UI;
> using System.Web.UI.WebControls;
> using System.ComponentModel;
> using System.Runtime.Serialization;
>
> namespace Controls.Common
> {
> /// <summary>
> /// Summary description for MyControl.
> /// </summary>
> public class MyControl : Control
> {
> public MyControl()
> {
> }
>
> #region Properties
> private string _HeaderText;
> public string HeaderText
> {
> get
> {
> return _HeaderText;
> }
> set
> {
> _HeaderText = value;
> }
> }
> #endregion
> }
> }
>
>
> using System;
> using System.Web;
> using System.Data;
> using System.Xml;
> using System.Text;
> using System.Collections;
> using System.Diagnostics;
> using System.Web.UI;
> using System.Web.UI.WebControls;
> using System.ComponentModel;
> using System.Runtime.Serialization;
>
> namespace Controls.Common
> {
> /// <summary>
> /// Summary description for C1.
> /// </summary>
> public class C1 : Control
> {
> public C1()
> {
> }
>
> #region Properties
> private string _Text;
> public string Text
> {
> get
> {
> return _Text;
> }
> set
> {
> _Text = value;
> }
> }
> #endregion
>
> #region Protected Methods
> protected override void Render
> (HtmlTextWriter output)
> {
> output.Write("<tr>");
> output.Write("<td>");
> output.Write("<A HREF=\"#\" id=\"A1
> \" onclick=\"return f_Change('A1');\" CLASS=\"Link\">");
> output.Write(this._Text);
> output.Write("</A>");
> output.Write("</td>");
> output.Write("</tr>");
> }
> #endregion
>
> }
> }
>
>
> and aspx file code :
>
> <%@ Register TagPrefix="myCtrl"
> Namespace="Controls.Common" Assembly="ControlLibrary" %>
>
>
> <form id="TestMyControl" method="post" runat="server">
> <myCtrl:MyControl runat=server >
> <myCtrl:C1 Text="A" runat=server />
> <myCtrl:C1 Text="B" runat=server />
> </myCtrl:MyControl>
> </form>
>
>
> and output I get is (view source):
>
>
> <form name="TestMyControl" method="post"
> action="TestMyControl.aspx" id="TestMyControl">
> <input type="hidden" name="__VIEWSTATE"
> value="dDwxNTc2NTg4MTgzOzs+VpGy0tGPOz32SgraT7FLb4y Xk7s=" />
>
> <tr><td><A HREF="#" id="A1" onclick="return f_Change
> ('A1');" CLASS="Link">A</A></td></tr>
> <tr><td><A HREF="#" id="A1" onclick="return f_Change
> ('A1');" CLASS="Link">B</A></td></tr>
>
> </form>
>
>
>
> I just want my Parent control (MyControl) to start a table
> tag and close a table tag. I mean the parent control
> should start some html tags and after all the child
> controls have finished rendering then the parent control
> shouls close all the tags which it started.
>
>
> Kindly guide me how to do this.
>
> Regards,
> Nitin
>
>
>
> >-----Original Message-----
> >How have you implemented the controls?
> >
> >Does MyControl allow child controls (i.e is it derived

> from Control or
> >WebControl and if WebControl then has it design-time

> attributes applid
> >namely ParseChildren(false) and PersistChildren(true) so

> that it supports
> >content between its tags as child controls)
> >
> >--
> >Teemu Keiski
> >MCP, Microsoft MVP (ASP.NET), AspInsiders member
> >ASP.NET Forum Moderator, AspAlliance Columnist
> >
> >"Nitin" <(E-Mail Removed)> wrote in message
> >news:080901c38fe6$5171d310$(E-Mail Removed)...
> >> Hi,
> >>
> >> I have created 2 custom control : MyControl and C1
> >> I have following tags in my aspx file :
> >> <myCtrl:MyControl runat=server>
> >> <myCtrl:C1 Text="A" runat=server />
> >> <myCtrl:C1 Text="B" runat=server />
> >> </myCtrl:MyControl>
> >>
> >> Now I want to render the output in the following

> manner :
> >> <TABLE>
> >> <TR>
> >> <TD>A</TD>
> >> </TR>
> >> <TR>
> >> <TD>B</TD>
> >> </TR>
> >> </TABLE>
> >>
> >> Custom control C1 will render each row (<tr>) which I am
> >> able to do by having a property named "Text" inside C1

> and
> >> overriding the Render method.
> >>
> >> Custom control MyControl should start a Table and also

> end
> >> the table when all the child controls are rendered.
> >>
> >> I am not able to close the table after all the child
> >> controls are rendered.
> >> I tried having a Custom ControlBuilder Class and
> >> overriding some methods but that is also not working.
> >>
> >> This thing works with asp.net controls such as :
> >>
> >> <asp:LinkButton ID="lb1" Runat=server>
> >> LinkButton <br>
> >> <asp:Label ID="l1" Runat=server>one</asp:Label>
> >> <br>
> >> <asp:Label ID="l2" Runat=server>two</asp:Label>
> >> <br>
> >> End
> >> </asp:LinkButton>
> >>
> >> The output when I see source :
> >>
> >> <a id="lb1" href="javascript:__doPostBack('lb1','')">
> >> LinkButton <br>
> >> <span id="l1">one</span><br>
> >> <span id="l2">two</span><br>
> >> End
> >> </a>
> >>
> >> My problem in my control is how to get this last "</a>"
> >> tag.
> >>
> >> Kindly help.
> >>
> >> Regards,
> >> Nitin
> >>

> >
> >
> >.
> >



 
Reply With Quote
 
Nitin.
Guest
Posts: n/a
 
      10-12-2003
Hi Teemu,

Thanks a lot for this quick reply. It worked with
RenderChildren.

Regards,
Nitin

>-----Original Message-----
>In the MyControl's Render call RenderChildren there where

you want child
>controls to be rendered.
>
>--
>Teemu Keiski
>MCP, Microsoft MVP (ASP.NET), AspInsiders member
>ASP.NET Forum Moderator, AspAlliance Columnist
>
>
>"Nitin" <(E-Mail Removed)> wrote in message
>news:043e01c39097$f2057050$(E-Mail Removed)...
>> Hi Teemu,
>>
>> Here is my code for MyControl and C1
>>
>> using System;
>> using System.Web;
>> using System.Data;
>> using System.Xml;
>> using System.Text;
>> using System.Collections;
>> using System.Diagnostics;
>> using System.Web.UI;
>> using System.Web.UI.WebControls;
>> using System.ComponentModel;
>> using System.Runtime.Serialization;
>>
>> namespace Controls.Common
>> {
>> /// <summary>
>> /// Summary description for MyControl.
>> /// </summary>
>> public class MyControl : Control
>> {
>> public MyControl()
>> {
>> }
>>
>> #region Properties
>> private string _HeaderText;
>> public string HeaderText
>> {
>> get
>> {
>> return _HeaderText;
>> }
>> set
>> {
>> _HeaderText = value;
>> }
>> }
>> #endregion
>> }
>> }
>>
>>
>> using System;
>> using System.Web;
>> using System.Data;
>> using System.Xml;
>> using System.Text;
>> using System.Collections;
>> using System.Diagnostics;
>> using System.Web.UI;
>> using System.Web.UI.WebControls;
>> using System.ComponentModel;
>> using System.Runtime.Serialization;
>>
>> namespace Controls.Common
>> {
>> /// <summary>
>> /// Summary description for C1.
>> /// </summary>
>> public class C1 : Control
>> {
>> public C1()
>> {
>> }
>>
>> #region Properties
>> private string _Text;
>> public string Text
>> {
>> get
>> {
>> return _Text;
>> }
>> set
>> {
>> _Text = value;
>> }
>> }
>> #endregion
>>
>> #region Protected Methods
>> protected override void Render
>> (HtmlTextWriter output)
>> {
>> output.Write("<tr>");
>> output.Write("<td>");
>> output.Write("<A HREF=\"#\" id=\"A1
>> \" onclick=\"return f_Change('A1');\" CLASS=\"Link\">");
>> output.Write(this._Text);
>> output.Write("</A>");
>> output.Write("</td>");
>> output.Write("</tr>");
>> }
>> #endregion
>>
>> }
>> }
>>
>>
>> and aspx file code :
>>
>> <%@ Register TagPrefix="myCtrl"
>> Namespace="Controls.Common" Assembly="ControlLibrary" %>
>>
>>
>> <form id="TestMyControl" method="post" runat="server">
>> <myCtrl:MyControl runat=server >
>> <myCtrl:C1 Text="A" runat=server />
>> <myCtrl:C1 Text="B" runat=server />
>> </myCtrl:MyControl>
>> </form>
>>
>>
>> and output I get is (view source):
>>
>>
>> <form name="TestMyControl" method="post"
>> action="TestMyControl.aspx" id="TestMyControl">
>> <input type="hidden" name="__VIEWSTATE"
>>

value="dDwxNTc2NTg4MTgzOzs+VpGy0tGPOz32SgraT7FLb4y Xk7s=" />
>>
>> <tr><td><A HREF="#" id="A1" onclick="return f_Change
>> ('A1');" CLASS="Link">A</A></td></tr>
>> <tr><td><A HREF="#" id="A1" onclick="return f_Change
>> ('A1');" CLASS="Link">B</A></td></tr>
>>
>> </form>
>>
>>
>>
>> I just want my Parent control (MyControl) to start a

table
>> tag and close a table tag. I mean the parent control
>> should start some html tags and after all the child
>> controls have finished rendering then the parent control
>> shouls close all the tags which it started.
>>
>>
>> Kindly guide me how to do this.
>>
>> Regards,
>> Nitin
>>
>>
>>
>> >-----Original Message-----
>> >How have you implemented the controls?
>> >
>> >Does MyControl allow child controls (i.e is it derived

>> from Control or
>> >WebControl and if WebControl then has it design-time

>> attributes applid
>> >namely ParseChildren(false) and PersistChildren(true)

so
>> that it supports
>> >content between its tags as child controls)
>> >
>> >--
>> >Teemu Keiski
>> >MCP, Microsoft MVP (ASP.NET), AspInsiders member
>> >ASP.NET Forum Moderator, AspAlliance Columnist
>> >
>> >"Nitin" <(E-Mail Removed)> wrote in message
>> >news:080901c38fe6$5171d310$(E-Mail Removed)...
>> >> Hi,
>> >>
>> >> I have created 2 custom control : MyControl and C1
>> >> I have following tags in my aspx file :
>> >> <myCtrl:MyControl runat=server>
>> >> <myCtrl:C1 Text="A" runat=server />
>> >> <myCtrl:C1 Text="B" runat=server />
>> >> </myCtrl:MyControl>
>> >>
>> >> Now I want to render the output in the following

>> manner :
>> >> <TABLE>
>> >> <TR>
>> >> <TD>A</TD>
>> >> </TR>
>> >> <TR>
>> >> <TD>B</TD>
>> >> </TR>
>> >> </TABLE>
>> >>
>> >> Custom control C1 will render each row (<tr>) which

I am
>> >> able to do by having a property named "Text" inside

C1
>> and
>> >> overriding the Render method.
>> >>
>> >> Custom control MyControl should start a Table and

also
>> end
>> >> the table when all the child controls are rendered.
>> >>
>> >> I am not able to close the table after all the child
>> >> controls are rendered.
>> >> I tried having a Custom ControlBuilder Class and
>> >> overriding some methods but that is also not working.
>> >>
>> >> This thing works with asp.net controls such as :
>> >>
>> >> <asp:LinkButton ID="lb1" Runat=server>
>> >> LinkButton <br>
>> >> <asp:Label ID="l1" Runat=server>one</asp:Label>
>> >> <br>
>> >> <asp:Label ID="l2" Runat=server>two</asp:Label>
>> >> <br>
>> >> End
>> >> </asp:LinkButton>
>> >>
>> >> The output when I see source :
>> >>
>> >> <a id="lb1" href="javascript:__doPostBack('lb1','')">
>> >> LinkButton <br>
>> >> <span id="l1">one</span><br>
>> >> <span id="l2">two</span><br>
>> >> End
>> >> </a>
>> >>
>> >> My problem in my control is how to get this

last "</a>"
>> >> tag.
>> >>
>> >> Kindly help.
>> >>
>> >> Regards,
>> >> Nitin
>> >>
>> >
>> >
>> >.
>> >

>
>
>.
>

 
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
this.Controls.Add(Control) Does Not Add Control to child collection (this.Controls.Count == 0) Chad Scharf ASP .Net 3 10-18-2007 03:53 PM
Control.Controls bug? Control's child controls missing at the run time. sinelnikov.andrei@gmail.com ASP .Net Building Controls 1 12-08-2005 06:47 AM
Control.Controls bug? Control's child controls missing at the run time. sinelnikov.andrei@gmail.com ASP .Net Web Controls 1 12-08-2005 06:46 AM
HELP! Child controls of child controls not visible to web app lisa@starways.net ASP .Net Building Controls 0 05-05-2005 09:14 PM
How do I: Main thread spawn child threads, which child processes...control those child processes? Jeff Rodriguez C Programming 23 12-09-2003 11:06 PM



Advertisments