Guru's challenge: How to place multiple instance of a control on a page with abnormal capabilities

N

.Net Newbie

I am relatively new to .Net and have been coding an intranet site for my
employer for a couple of months. I am currently stuck coding in a
text-editor called EditPlus without access to the VS.Net IDE, and coding
pages with the script directly in each page (not using the codebehind
method) as most of my learning material has demonstrated. I started with
the IBuySpy Portal (SDK version not VS Version) as my base portal and have
coded custom controls and pages within the portal.

My employer recently requested that I change one of my pages so that at a
click of a button a section of code, including roughly 23 asp WebServer
Controls, can be repeated so that the user can enter multiple sets of the
same information into one SQL Server table when they save the information on
the page (along with the main information in another table). I had already
designed the tables with this in mind, however I am having some problems
with getting the .Net code to function correctly. The way the original page
was designed was that when a user clicked on one of three different buttons
in this section in question the cooresponding popup window was called which
loaded a lookup(aspx) page. When the user clicked on a hyperlink in the
lookup page the 23 controls on the main page were populated from SQL Server
tables (via JavaScript) and the popup window closed. Although I'm sure
there's a better way to do it, I used JavaScript to pass the variables back
to the main window because I knew how to do it. Since the change request
came in have I moved this section of 23 controls into an ascx file, removed
the popup windows(lookups), and am able to call it with the click of a
button. Into a table column formatted as follows: <td id="ContentPane"
colspan="2" runat="server"></td>

Unfortunately, my method has left me no way to reference the controls or get
the popup windows to function correctly. Each one of the newly displayed
controls have names like _ctl1:phone, _ctl2:phone, _ctl3:phone, etc for each
time I add the control. Furthermore I am not able to retain information in
a given control instance. The way I currently have the code designed is
that a counter increments everytime the "Add" button is pressed. This
determines the number of times to add the control by looping through the
following code:

Control parent = Page.FindControl("ContentPane");
PortalModuleControl portalModule = (PortalModuleControl)
Page.LoadControl("Children.ascx");
parent.Controls.Add(portalModule);

Everything I have read indicates that I need to have this control inside
some container such as a datagrid or datalist in order to reference it
correctly. However all of my efforts have met with failure. The biggest
problem I have is that I don't even know if what I am trying to do can be
done much less how to do it. If anyone has any idea how I can get this
functioning correctly and/or how I can reference each new control instance,
while limited by my current coding environment
please, please, please, let me know.

Thanks in advance,

Jeff
 
J

Jeffrey Palermo [MCP]

Jeff,
First of all, you are severely limiting yourself by not using the VS.NET
IDE. I realize that money is an issue, but just know that your employer is
holding you back when this project could take half the time to do if you had
the proper tools. With that being said, I respect you for doing whatever it
takes to learn .NET and use it for something useful.

I assume that you are dynamically loading these controls at runtime and that
at design time you don't know how many instances of this control will be on
the page. The first thing that comes to mind is to make an asp:Table with a
dynamic number of <asp:TableRow/>, and each TableRow would have your editing
controls. Then when you need access to all the controls, you can:
<code>
foreach(TableRow row in myTable.Rows){
TextBox txt = (TextBox)row.FindControl("myInputControl");
//save off txt.Text
txt = (TextBox)row.FindControl("mySecondInputControlInTheSameRow");
//save off txt.Text
}
</code>
and you will be able to find and use every control, but remember this when
using dynamic controls: The code to recreate the controls must run at the
same time on the first load as in the post back. If you are creating the
controls in Page_Load, you should be fine, but on PostBack, you have to
recreate the same number of controls in the same place so that the posted
data can be filled into these dynamic controls. Then after all the controls
are there again, you can loop through and get their values.

Best regards,
Jeffrey Palermo
 

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,997
Messages
2,570,239
Members
46,827
Latest member
DMUK_Beginner

Latest Threads

Top