Reputation: 13
I got a problem with getting the correct value (checked true/false) of my radiobuttons inside nested repeaters.
VIEW
<table id="HoursTable">
<asp:Repeater ID="hoursRepeater" runat="server">
<HeaderTemplate>
<thead>
<tr>
<th>V</th>
<th>some text</th>
<th>some text</th>
<th>some text</th>
</tr>
</thead>
</HeaderTemplate>
<ItemTemplate>
<tr runat="server" ID="itemTemplateRow">
<td runat="server" visible="false">
<asp:HiddenField runat="server" ID="HoursIDHiddenField" Value='<%# Eval("HoursID") %>' />
</td>
<td class="centerAlign">
<input runat="server" type="radio" class="radiobuttonMain" ID="aprrovalRadioButton" Checked='<%# DataBinder.Eval(Container.DataItem, "IsApproved") %>' />
</td>
<td>some text</td>
<td>some text</td>
</tr>
<asp:Repeater runat="server" ID="temporaryHoursRepeater" OnItemDataBound="temporaryHoursRepeater_ItemDataBound">
<ItemTemplate>
<tr runat="server" ID="itemTemplateRow">
<td runat="server" visible="false">
<asp:HiddenField runat="server" ID="HoursIDHiddenField" Value='<%# Eval("HoursID") %>' />
</td>
<input runat="server" type="radio" class="radiobuttonTemp" ID="aprrovalRadioButton" Checked='<%# DataBinder.Eval(Container.DataItem, "IsApproved") %>'/>
<td>some text</td>
<td>some text</td>
</tr>
</ItemTemplate>
</asp:Repeater>
</ItemTemplate>
</asp:Repeater>
</table>
<tr>
<td>
<asp:Button runat="server" ID="saveButton" CssClass="saveButton" Text="Save" OnClick="saveButton_Click" />
</td>
</tr>
CODE BEHIND
Protected Sub saveButton_Click(sender As Object, e As EventArgs)
For Each rptItem As RepeaterItem In urenRepeater.Items
Dim currentHoursGroup As New List(Of Hour)
currentHoursGroup.Add(DomainController.getInstance.getHour(CType(rptItem.FindControl("HoursIDHiddenField"), HiddenField).Value))
For Each rptItemC As RepeaterItem In CType(rptItem.FindControl("temporaryUrenRepeater"), Repeater).Items
currentHoursGroup.Add(DomainController.getInstance.getHour(CType(rptItemC.FindControl("HoursIDHiddenField"), HiddenField).Value))
Next
If DirectCast(rptItem.FindControl("approvalRadioButton"), HtmlInputRadioButton).Checked Then
currentHoursGroup.Remove(DomainController.getInstance.getHour(CType(rptItem.FindControl("HoursIDHiddenField"), HiddenField).Value))
DomainController.getInstance.getHour(CType(rptItem.FindControl("HoursIDHiddenField"), HiddenField).Value).deleteAllTemporaryHours()
Else
For Each rptItemT As RepeaterItem In CType(rptItem.FindControl("temporaryUrenRepeater"), Repeater).Items
If DirectCast(rptItemT.FindControl("approvalRadioButton"), HtmlInputRadioButton).Checked Then
currentHoursGroup.Remove(DomainController.getInstance.getHour(CType(rptItemT.FindControl("HoursIDHiddenField"), HiddenField).Value))
'do sth
End If
Next
End If
For Each u As Hour In currentHoursGroup
'do sth
Next
Next
End Sub
The problem is that 'DirectCast(rptItem.FindControl("approvalRadioButton"), HtmlInputRadioButton).Checked' always returns false, even it is checked.
I did hours of research, but I can't figure out what I'm doing wrong here
Upvotes: 0
Views: 158
Reputation: 13
I found a workaround to reach what I want.
I added in each row a hiddenfield and gave it the following attribute:
Value='<%# DataBinder.Eval(Container.DataItem, "IsApproved").ToString %>'
Then I wrote some javascript to change the value (true/false) of the hiddenfield if a radiobutton was pressed.
In the code behind I check from every repeateritem the value of the hiddenfield and I got my selected rows!
Upvotes: 0