Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsFree MagazinesWhite PapersSubmit Content
Discussion GroupsASP.NETWindows FormsLanguages.NET FrameworkVisual Studio.NET
Articles.NET FrameworkASP.NETToolsWindows Forms
.NET DirectoryOpen Source ProjectsUser GroupsWeb Resources
Related Topics
Visual Basic 6SQL ServerMS AccessOther DB ProductsMS Server ProductsMore Topics ...

.NET Forum / ASP.NET / Building Controls / December 2004

Tip: Looking for answers? Try searching our database.

PrepareControlHierarchy

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
Faizan Ahmed - 27 Dec 2004 12:04 GMT
Hello All,

I have yet another problem,
I've derived a control from Datagrid,

Now in the OnInit() method i Created a button control, added it to a
HtmlTable and added the HtmlTable to my Composite control's Control
collection.

The heirarchy is something like this
CustomControl  C
           HtmlTable      T
                       Button      B
i.e.
H.Controls.Add(B)
C.Controls.Add(T)

The render method of my control is as follows

Protected Overrides Sub Render(ByVal output As System.Web.UI.HtmlTextWriter)

MyBase.Render(output)

End Sub

This statement gives an error in DataGrid.PrepareControlHierarchy() method.
If i remove HtmlTable from the control collection of my control then it
works fine, but then the button control in the table does not raise any
events.

Can any one help??Mr. Saunders?
Thanks in advance people,

Best Regards
John Saunders - 28 Dec 2004 19:38 GMT
> Hello All,
>
[quoted text clipped - 29 lines]
>
> Can any one help??Mr. Saunders?

I wouldn't add anything to a DataGrid which it is not expecting to find
there. After all, how would your control feel if some derived control
started playing with its Controls collection?

Instead, you could just not add T, and change your Render method to:

Protected Overrides Sub Render(ByVal output As System.Web.UI.HtmlTextWriter)
   T.RenderControl(output)
   MyBase.Render(output)
End Sub

If you need the table to come after the DataGrid, you can put the
T.RenderControl after the MyBase.Render.

John Saunders
Faizan Ahmed - 29 Dec 2004 06:13 GMT
> > Hello All,
> >
[quoted text clipped - 37 lines]
>
> Protected Overrides Sub Render(ByVal output As
System.Web.UI.HtmlTextWriter)
>     T.RenderControl(output)
>     MyBase.Render(output)
[quoted text clipped - 4 lines]
>
> John Saunders

But if i implement it this way i wont get any events raised by my control
T(or its child controls B), because their viewstate wont be mantained by the
Grid. I think this is a problem many people must've come across but i m not
sure why there is no solution available for it, may be there is a
straightforward way of doin such a think and i m moving in a wrong
direction.
I've been able to identify the cause of my problem; the
PrepareControlHeirarchy() function of the DataGrid (which applies styles on
the control)expects all of the new controls to be added at the end of
controls collection.

I found no solution as yet. Any help would be appreciated

Faizan Ahmed
John Saunders - 29 Dec 2004 14:57 GMT
>> > Hello All,
>> >
[quoted text clipped - 60 lines]
> the control)expects all of the new controls to be added at the end of
> controls collection.

It may be that  you will have to stop inheriting from DataGrid and instead
create a composite control which contains both the DataGrid and  your Table.
Both the DataGrid and the Table would be in the Controls collection of your
control, thus ViewState will be maintained.

John Saunders

Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.