joe_pool_is Posted June 30, 2004 Posted June 30, 2004 I am looking for a smarter method of collecting data from a webform. The form I am currently working on only has 15 different variables to collect from, but a form could forseeably have many more. Currently, to collect form data, I am stuck writing something like this: [font=Courier New][color=black]Private Sub btnSubmit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles[/color][/font][font=Courier New][color=black] btnSubmit.Click [/color][/font][font=Courier New][color=black] Dim strCollection As String [/color][/font][font=Courier New][color=black] strCollection = txtName.Text strCollection &= txtAddress.Text strCollection &= chkHasInternet.Checked.ToString[/color][/font] [font=Courier New][color=black] ' // etc. [/color][/font][font=Courier New][color=black]End [/color][/font][color=#0000ff][font=Courier New][color=black]Sub[/color][/font][color=black][/color][/color] Like I said: That works, but a "smarter way" would be something like this: [font=Courier New][color=black]Private Sub btnSubmit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles[/color][/font][font=Courier New][color=black] btnSubmit.Click[/color][/font] [font=Courier New][color=black] Dim objVariable as Object [/color][/font][font=Courier New][color=black] Dim strCollection As String[/color][/font] [font=Courier New][color=black] strCollection = "" [/color][/font][font=Courier New][color=black] For Each objVariable In Me.Controls[/color][/font] [font=Courier New] strCollection &= objVariable.ToString & vbCrLf[/font] [font=Courier New] Next[/font][color=black] [/color][font=Courier New][color=black]End [/color][/font][color=#0000ff][font=Courier New][color=black]Sub[/color][/font][color=black] However, the "smarter way" works too well: It seems to be returning to me the string value of everything on the webpage. Is there a way to tell my code that I only want to collect my data from the input fields? Also, I would appreciate any suggestions on the best way to handle large collections of data such as this. My "smarter way" is probably not the best way. Thanks in advance for your help, Joe[/color][/color] Quote Avoid Sears Home Improvement
Moderators Robby Posted June 30, 2004 Moderators Posted June 30, 2004 In your loop you can check for TypeOf, Also, if you have containers such as Panels, you can loop just those containers you want. Quote Visit...Bassic Software
joe_pool_is Posted June 30, 2004 Author Posted June 30, 2004 Thanks Bobby ... er, Robbie! (sorry about that last slip) Quote Avoid Sears Home Improvement
Moderators Robby Posted July 1, 2004 Moderators Posted July 1, 2004 hmmm, you still didn't get it right. ( R o b b y ) :) Quote Visit...Bassic Software
joe_pool_is Posted July 1, 2004 Author Posted July 1, 2004 Boy, that's embarrassing.... I tried entering the following code for collecting my data: [font=Fixedsys][color=#0000ff]Private[/color] [color=#0000ff]Sub[/color] btnSubmit_Click([color=#0000ff]ByVal[/color] sender [color=#0000ff]As[/color] System.Object, [color=#0000ff]ByVal[/color] e [color=#0000ff]As[/color] System.EventArgs) [color=#0000ff]Handles[/color][/font][font=Fixedsys] btnSubmit.Click[/font] [font=Fixedsys][color=#0000ff][color=#008000] [/color]Dim[/color] objCtrl [color=#0000ff]As[/color] [color=#0000ff]Object[/color][/font] [font=Fixedsys][color=#0000ff][color=#008000] [/color]Dim[/color] strInfo [color=#0000ff]As[/color] [color=#0000ff]String[/color][/font] [font=Fixedsys][color=#008000] [/color]strInfo = ""[/font] [font=Fixedsys][color=#0000ff][color=#008000] [/color]For[/color] [color=#0000ff]Each[/color] objCtrl [color=#0000ff]In[/color] [color=#0000ff]Me[/color][/font][font=Fixedsys].Controls[/font] [font=Fixedsys][color=#0000ff][color=#008000] [/color]Select[/color] [color=#0000ff]Case[/color][/font][font=Fixedsys] (objCtrl.GetType.Name)[/font] [font=Fixedsys][color=#0000ff][color=#008000] [/color]Case[/color][/font][font=Fixedsys] "RadioButton"[/font] [font=Fixedsys][color=#008000] [/color]strInfo &= objCtrl.checked.ToString & vbCrLf[/font] [font=Fixedsys][color=#0000ff][color=#008000] [/color]Case[/color][/font][font=Fixedsys] "DropDownList"[/font] [font=Fixedsys][color=#008000] [/color]strInfo &= objCtrl.SelectedValue.ToString & vbCrLf[/font] [font=Fixedsys][color=#0000ff][color=#008000] [/color]Case[/color][/font][font=Fixedsys] "CheckBox"[/font] [font=Fixedsys][color=#008000] [/color]strInfo &= objCtrl.Checked.ToString & vbCrLf[/font] [font=Fixedsys][color=#0000ff][color=#008000] [/color]Case[/color][/font][font=Fixedsys] "ListBox"[/font] [font=Fixedsys][color=#0000ff][color=#008000] [/color]Dim[/color] objValue [color=#0000ff]As[/color] [color=#0000ff]Object[/color][/font] [font=Fixedsys][color=#0000ff][color=#008000] [/color]For[/color] [color=#0000ff]Each[/color] objValue [color=#0000ff]In[/color][/font][font=Fixedsys] objCtrl.selectedValue[/font] [font=Fixedsys][color=#008000] [/color]strInfo &= objValue.SelectedValue.ToString & vbCrLf[/font] [color=#0000ff][font=Fixedsys][color=#008000] [/color]Next[/font][/color] [font=Fixedsys][color=#0000ff][color=#008000] [/color]Case[/color][/font][font=Fixedsys] "TextBox"[/font] [font=Fixedsys][color=#008000] [/color]strInfo &= objCtrl.text & vbCrLf[/font] [font=Fixedsys][color=#0000ff][color=#008000] [/color]End[/color] [color=#0000ff]Select[/color][/font] [color=#0000ff][font=Fixedsys][color=#008000] [/color]Next[/font][/color] [font=Fixedsys][color=#0000ff]End[/color] [/font][color=#0000ff][font=Fixedsys]Sub[/font][/color] But my output was no where near what I as expecting. In the "Immediate Window" I got this: [font=Fixedsys]?objCtrl.GetType.FullName[/font] [font=Fixedsys]"System.Web.UI.ResourceBasedLiteralControl"[/font] [font=Fixedsys]?objCtrl.GetType.FullName[/font] [font=Fixedsys]"System.Web.UI.HtmlControls.HtmlForm"[/font] [font=Fixedsys]?objCtrl.GetType.FullName[/font] [font=Fixedsys]"System.Web.UI.LiteralControl"[/font] Have I done something extremely wrong? Also, why isn't my VB code posting correctly? I am placing it within ["VB"] tags, but when I cut and past from VS.NET, it originally populates the text with Size=1, Face=Verdana. Is there a setting I am missing somewhere? Quote Avoid Sears Home Improvement
Administrators PlausiblyDamp Posted July 1, 2004 Administrators Posted July 1, 2004 The problem is that an ASP.Net page isn't as simple to navigate through code as a Windows Forms based system. The HTML that is generated contains 3 controls: the HEAD bit of a page (all the , etc), the ... bit in the middle that contains the real set of controls and the footer bit etc. You are probably going to need to recurse through each control to see if it contains child controls Public Sub LoopThroughControls(parentControl as Control) Dim ctrl As Control ctrls = New ArrayList For each ctrl in parentControl .Controls 'your code here Select Case (objCtrl.GetType.Name) '.... '..... If ctrl .HasControls Then LoopThroughControls(ctrl ) End If Next Quote Posting Guidelines FAQ Post Formatting Intellectuals solve problems; geniuses prevent them. -- Albert Einstein
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
× Pasted as rich text. Paste as plain text instead
Only 75 emoji are allowed.
× Your link has been automatically embedded. Display as a link instead
× Your previous content has been restored. Clear editor
× You cannot paste images directly. Upload or insert images from URL.