473,385 Members | 1,620 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,385 software developers and data experts.

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
  1.  
  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" 
  6.  
  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>
  30.  
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
  6.  
  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
  14.  
  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
  20.  
  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
  26.  
  27.                 If i = 0 Then       
  28.                     If j = 0 Then
  29.                         tc.Text = "No."
  30.  
  31.                     ElseIf j = 1 Then
  32.                         tc.Text = "Question"
  33.  
  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"
  45.  
  46.                     ElseIf j = 0 Then
  47.                         tc.Text = rowCnt
  48.                         rowCnt += 1
  49.  
  50.                     ElseIf j = 1 Then
  51.                         tc.Text = v_dtTable2.Rows(i - 1).Item("TestQuestion")
  52.  
  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
  62.  
  63.                         tc.Controls.Add(rBtn)
  64.                         tc.HorizontalAlign = HorizontalAlign.Center
  65.                     End If
  66.                 End If
  67.  
  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
  76.  
  77.             tbl.Rows.Add(tr)                              
  78.         Next i
  79.  
  80.     End Sub
  81.  
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
  5.  
  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
  22.  
  23.         Me.Label1.Text = score
  24.     End Sub
  25.  
Jul 7 '09 #1
12 24746
Frinavale
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
Frinavale
9,735 Expert Mod 8TB
@ive1122
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.

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


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



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
Gaigoi
4
Hi,
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
Gaigoi
4
Hi,

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
Gaigoi
4
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
Gaigoi
4
Thank! Im using the placeholder to solved my question.
Sep 27 '09 #12
Frinavale
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.

-Frinny
Sep 28 '09 #13

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

Similar topics

4
by: mitch-co2 | last post by:
What I am trying to do is when someone clicks on the YES radio button I want the text field called MYTEXT to equal the text field named DATE. The below code works as long as I do NOT UN-COMMENT...
5
by: johnsuth | last post by:
I want to produce a trivial demonstration of dynamic modification. I thought that pressing a button might change its color. I studied O'Reillys books and successfully created the button with a...
5
by: PCH | last post by:
I have an c# asp.net (.net 1.1) web page, viewstate on. The problem I am having is on the button click postback to update. Heres the situation: I have an asp table that has 1 header row. ...
2
by: darrel | last post by:
I'm using some standard HTML radio buttons (to allow finer javascript interaction) on a web page and would like to catch the selected item on postback. Since they are all ID's uniquely, is there a...
8
by: david | last post by:
I have developed a web form by using visual Studio. My question is: (1) what is the problem? (2) what is right way to do it? In the form, there are labels with id: lblWear, lblColor, and...
11
by: saurabh | last post by:
Can anybody tell me how to change the value of an html control from the c#.... eg i hv one asp.net radio button control and one html hidden variable... so on page load in case the radio button is...
1
by: Mufasa | last post by:
I have a couple of radio buttons that make various things appear/disappear on the screen through JavaScript. All works great. Problem is I'll click a radio button, something will appear, I reload...
4
by: mcelary | last post by:
When the user clicks a radio button it creates a postback where I add a button control dynamically. My problem is I cannot get the dynamically added button to work with on an click event. The button...
13
by: tommymo | last post by:
Hi everyone I'm new to this site and the world of ASP.Net C# programming. I have been learning controls and integrating them with a SQL database. So far I have been able to move along and understand...
0
by: taylorcarr | last post by:
A Canon printer is a smart device known for being advanced, efficient, and reliable. It is designed for home, office, and hybrid workspace use and can also be used for a variety of purposes. However,...
0
by: Charles Arthur | last post by:
How do i turn on java script on a villaon, callus and itel keypad mobile phone
0
by: aa123db | last post by:
Variable and constants Use var or let for variables and const fror constants. Var foo ='bar'; Let foo ='bar';const baz ='bar'; Functions function $name$ ($parameters$) { } ...
0
by: ryjfgjl | last post by:
In our work, we often receive Excel tables with data in the same format. If we want to analyze these data, it can be difficult to analyze them because the data is spread across multiple Excel files...
0
by: emmanuelkatto | last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud. Please let me know. Thanks! Emmanuel
0
BarryA
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
0
by: Hystou | last post by:
There are some requirements for setting up RAID: 1. The motherboard and BIOS support RAID configuration. 2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...
0
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
0
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.