470,594 Members | 1,106 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 470,594 developers. It's quick & easy.

How to get value of dynamic control radio button after postback

Hi guys,

I am looking into create a dynamic survey as posted in Get User Input From Dynamic Controls but with some different environment
Below is what i am trying to do:
First when the user click the button, it will populate a dynamic table with radio button for the survey questionnaire
However, i was unable to get its value (for score calculation) after clicking the submit button
Beside i am using an ajax extension (updatePanel) for the development
I have been look into viewstate but i hv no idea with it.

Does anyone have any ideas?

Here i included some of my code:

part of code in page
Expand|Select|Wrap|Line Numbers
  2.         <asp:UpdatePanel ID="UpdatePanel1" runat="server">
  3.             <ContentTemplate>
  4.                 <asp:Button ID="btnTest" runat="server" Text="Take Test" OnClick="btnTest_Click" Visible="False" />
  5.                 <asp:Label ID="lblTestErrMsg" runat="server" 
  7.     ForeColor="Red"></asp:Label><br />
  8.                     <table id="tblTest" runat="server" style="width: 100%">
  9.                         <tr>
  10.                             <td>
  11.                              <asp:PlaceHolder ID="phQuestionnaire" runat="server"></asp:PlaceHolder>
  12.                                 <br />
  13.                                 </td>
  14.                         </tr>
  15.                         <tr>
  16.                             <td>
  17.                                 </td>
  18.                         </tr>
  19.                         <tr>
  20.                             <td>
  21.                                 <asp:Label ID="lblResult" runat="server"></asp:Label></td>
  22.                         </tr>
  23.                         <tr>
  24.                             <td>
  25.                             </td>
  26.                         </tr>
  27.                     </table>
  28.                 </ContentTemplate>
  29.             </asp:UpdatePanel>
Populate Dynamic Table function
* v_dtTable and v_dtTable2 contains the data from database

Expand|Select|Wrap|Line Numbers
  1.    Private Sub CreateDynamicTable(ByVal v_dtTable As Data.DataTable, ByVal v_dtTable2 As Data.DataTable)
  2.         Me.phQuestionnaire.Controls.Clear()
  3.         Dim cols As Integer = v_dtTable.Rows.Count + 2
  4.         Dim rows As Integer = v_dtTable2.Rows.Count + 1
  5.         Dim mid As Integer = v_dtTable.Rows.Count / 2
  7.         Dim tbl As Table = New Table()
  8.         tbl.ID = "tblQs"
  9.         tbl.BorderWidth = 1
  10.         tbl.CellPadding = 0
  11.         tbl.CellSpacing = 0
  12.         tbl.Width = 500
  13.         tbl.EnableViewState = True
  15.         Me.phQuestionnaire.Controls.Add(tbl)
  16.         For i As Integer = 0 To rows - 1
  17.             Dim tr As TableRow = New TableRow()
  18.             Dim rowCnt As Integer = 1
  19.             Dim colCnt As Integer = 0
  21.             For j As Integer = 0 To cols - 1
  22.                 Dim tc As TableCell = New TableCell()
  23.                 tc.BorderWidth = 1
  24.                 Dim lbl As Label = New Label()
  25.                 Dim bol As Boolean = False
  27.                 If i = 0 Then       
  28.                     If j = 0 Then
  29.                         tc.Text = "No."
  31.                     ElseIf j = 1 Then
  32.                         tc.Text = "Question"
  34.                     Else
  35.                         tc.Text = v_dtTable.Rows(j - 2).Item("scoreName")
  36.                         tc.HorizontalAlign = HorizontalAlign.Center
  37.                     End If
  38.                     tc.BackColor = Drawing.Color.DeepSkyBlue
  39.                     tc.ForeColor = Drawing.Color.White
  40.                 Else
  41.                     If v_dtTable2.Rows(i - 1).Item("isHeader") Then
  42.                         bol = True
  43.                         tc.Text = v_dtTable2.Rows(i - 1).Item("TestQuestion")
  44.                         tc.Style("font-weight") = "bold"
  46.                     ElseIf j = 0 Then
  47.                         tc.Text = rowCnt
  48.                         rowCnt += 1
  50.                     ElseIf j = 1 Then
  51.                         tc.Text = v_dtTable2.Rows(i - 1).Item("TestQuestion")
  53.                     Else
  54.                         Dim rBtn As RadioButton = New RadioButton
  55.                         rBtn.GroupName = "rBtn" & rowCnt
  56.                         rBtn.ID = "rBtn_" & rowCnt & "_" & colCnt
  57.                         rBtn.InputAttributes("value") = v_dtTable.Rows(j - 2).Item("scoreValue")
  58.                         colCnt += 1
  59.                         If j = mid + 2 Then
  60.                             rBtn.Checked = True
  61.                         End If
  63.                         tc.Controls.Add(rBtn)
  64.                         tc.HorizontalAlign = HorizontalAlign.Center
  65.                     End If
  66.                 End If
  68.                 If bol Then
  69.                     tc.ColumnSpan = cols - 1
  70.                     tr.Cells.Add(tc)
  71.                     Exit For
  72.                 Else
  73.                     tr.Cells.Add(tc)
  74.                 End If
  75.             Next j
  77.             tbl.Rows.Add(tr)                              
  78.         Next i
  80.     End Sub
Calculate Score function
Expand|Select|Wrap|Line Numbers
  1.         Private Sub subCalculateScore()
  2.         Dim tblQs As Table = CType(Me.phQuestionnaire.FindControl("tblQs"), Table)
  3.         Dim rb As New RadioButton
  4.         Dim score As Integer = 0
  6.         If Me.phQuestionnaire.FindControl("tblQs") Is Nothing Then
  7.         Else
  8.             For Each tr As TableRow In tblQs.Rows
  9.                 For Each tc As TableCell In tr.Cells
  10.                     For Each c As Control In tc.Controls
  11.                         If c.GetType.ToString = rb.GetType.ToString Then
  12.                             Dim rBtn As RadioButton = CType(c, RadioButton)
  13.                             If rBtn.Checked Then
  14.                                 Dim strScore As String = rBtn.InputAttributes("value")
  15.                                 score += CInt(strScore)
  16.                             End If
  17.                         End If
  18.                     Next
  19.                 Next
  20.             Next
  21.         End If
  23.         Me.Label1.Text = score
  24.     End Sub
Jul 7 '09 #1
12 24391
9,735 Expert Mod 8TB
Well there are a few things to keep in mind when you're using dynamic controls.

First of all you should consider the scope of the dynamic controls.

If you create a control in a function (like a button, table, radiobutton...) then the control only exists within that function.....it will be rendered on the page (because you added it to the placeholder) but when the request comes back to the server the controls declared in the function will no longer exist.

This means that dynamic controls have to have a scope for the whole page...you cannot simply declare them inside a method.

The other thing you have to consider is the ASP Page Life Cycle....

Please take a look this article about how to use dynamic controls in ASP.NET....

I don't think you need to use dynamic controls for your application.
You should be using a RadioButtonList instead of dynamically creating individual RadioButtons. You can assign a DataSource to the RadioButtonList. The RadioButtonList will automatically create the necessary RadioButtons for the DataSource that it's bound to.

This means that your RadioButtonList is not dynamic, but the datasource that it's bound to IS....so the content of the RadioButtonList is dynamic.

For example check out this article on how to bind a RadioButtonList to a Custom Object...if you're just using a DataBase then it's even easier :)

This will save you a lot of problems.
Jul 7 '09 #2
Hi Frinavale.
Thank you for your reply.

Well, the outcome i want to get is as shown in the image below:

I don't think that it can be done (column by column) by using radio button list.

At first, i was using gridview to generate the survey. However, i was unable to do it using data source due to dynamic columns number. Besides, the header for the radio button is also generated dynamically. Therefore, i have no choice but to go for dynamic controls generation.

Do you have any idea or solution for this?

I very appreciated your help :)
Jul 7 '09 #3
9,735 Expert Mod 8TB
Ah I understand, you're right, you need to use dynamic controls.

I would recommend revisiting the GridView idea...or you could consider creating a templated control. For an example of a templated user control check out this post.

Check out the ITemplate interface, this article about Building Templated Custom ASP.NET Server Controls, this article on working with template fields....that should probably get you started.

If you have any questions let me know.

Jul 7 '09 #4
In the GridView create the the template like this

<asp:TemplateField HeaderText="Assign">
<input ID="Radio1" type="radio" name="RdBtn" value='<%# Eval("ID") %>' />

Code Behind after post back. Get the value as below. you can get the value
of Radio button with name. bcz in same group the name is same for each.
and the following code will get the value of selected Radio Button

string selectedRadioButton = "";
selectedRadioButton = Request.Form["RdBtn"];
Jul 8 '09 #5
im working on similar project and wonder if you can help me. Can you post some sample code?
Sep 25 '09 #6
i can help you and can post sample code, when you post your Question.
Sep 25 '09 #7

I need to populate the table to display as below. All the questions and answers is store in a oracle database.

Question | Answer 1 | Answer 2 | Answer 3 | Answer 4 | Answer 5

How do i format so it will display as above?

How do I loop through the radio button to find answer then insert it back to the database?

I tried to format the question by using Response.write() but when I click on submit answer it does not do anything and I could not use the FindControl to find the radio button in code behind.
Sep 25 '09 #8
i think you have two tables one for questions and other for answers .
if this is the case use inner join and then convert it to pivot table. you will get the desired result for formatting.

and for the radio button. u can do it with javascript . implement onclick event on radio button. and store the clicked radio buttons value in hidden field and get the value from hidden field in code behind. and store it to database.
Sep 25 '09 #9
Thank you you reply. Since the question and answer are dynamic create how do i know how many hidden field to create?
Sep 25 '09 #10
create only one hidden field . if u know XML then it is very easy. just write XML tags to hidden field and you can access every value or attribute of the tag you have written to hidden field.
Sep 25 '09 #11
Thank! Im using the placeholder to solved my question.
Sep 27 '09 #12
9,735 Expert Mod 8TB
I have no idea what your problem was, but typically you don't need to use a hidden field in order to determine the value of a radio button. A "place holder" in asp.net wouldn't really help you either since a placeholder is a container used to store server controls that are dynamically added to the Web page.

I'm assuming that you've solved your mysterious problem but I just wanted to make sure that whatever you've done isn't going to confuse someone else looking for help with retrieving the value of a dynamically created radio button.

Normally you would use the FindControl method to retrieve the dynamically created radio button (or any dynamically generated control). Once you have retrieved the dynamic control you can retrieve it's value.

Sep 28 '09 #13

Post your reply

Sign in to post your reply or Sign up for a free account.

Similar topics

5 posts views Thread by johnsuth | last post: by
5 posts views Thread by PCH | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.