我不知道这是否可行,但如果{{1}中的值为asp:CheckBox
,我会尝试将FormView
设置为Checked=True
} ...
这里是后面的代码(在PreRender Sub中):
database = yes|no|pending etc
并在设计视图中:
Dim rowHiredStatus As DataRowView = CType(fvRecruitInterviewed.DataItem, DataRowView)
Dim lblTestHiredStatus As Label = CType(fvRecruitInterviewed.FindControl("lblTestHiredStatus"), Label)
Dim chkHiredPending As CheckBox = CType(fvRecruitInterviewed.FindControl("chkHiredPending"), CheckBox)
Dim chkHiredNo As CheckBox = CType(fvRecruitInterviewed.FindControl("chkHiredNo"), CheckBox)
Dim chkHiredYes As CheckBox = CType(fvRecruitInterviewed.FindControl("chkHiredYes"), CheckBox)
If Not IsNothing(rowHiredStatus) Then
Dim strHiredStatus As String
strHiredStatus = rowHiredStatus("HiredStatus").ToString()
lblTestHiredStatus.Text = strHiredStatus
If strHiredStatus = "yes" Then
chkHiredYes.Checked = True
lblTestHiredStatus.Text = strHiredStatus
ElseIf (strHiredStatus = "no") Then
chkHiredNo.Checked = True
lblTestHiredStatus.Text = strHiredStatus
Else
chkHiredPending.Checked = True
lblTestHiredStatus.Text = strHiredStatus
End If
End If
令人沮丧的是,测试标签显示正确的数据,但复选框不会改变。它只是默认为挂起复选框。
使用 <asp:CheckBox ID="chkHiredPending" runat="server" Text="Pending" />
<br />
<asp:CheckBox ID="chkHiredNo" runat="server" Text="Not Hired"/>
<br />
<asp:CheckBox ID="chkHiredYes" runat="server" Text="Hired" />
<br />
<asp:Label ID="lblTestHiredStatus" runat="server" />
群组或RadioButton
会很好,如果这更容易/可能
答案 0 :(得分:0)
根据对问题和代码的描述,我愿意站出来说问题是strHiredStatus的价值。
由于Pending正在被检查,我们知道代码被触发了,在代码中,pending是If语句中的default子句,这意味着问题必须是strHiredStatus的测试。
使用equals测试字符串时,它是区分大小写的测试。这意味着“是”与“是”不同。
有不同的方法可以解决这个问题,但我首选的方法是使用String.Equals方法来处理案例和文化不敏感:
If strHiredStatus.Equals("yes", StringComparison.InvariantCultureIgnoreCase) Then
chkHiredYes.Checked = True
lblTestHiredStatus.Text = strHiredStatus
ElseIf strHiredStatus.Equals("no", StringComparison.InvariantCultureIgnoreCase) Then
文化不敏感的原因(我之前已被烧过),如果你有一个字符串常量并且只是将常量字符串转换为小写字母,那么在国际运行时会得到意想不到的结果。
例如,在土耳其环境中运行时,大写字母I将不会转换为英文小写字母i,它将被转换为土耳其语i(不确定该字符的正确名称是什么,但是是一个不同的角色。)
答案 1 :(得分:0)
我在ASP.Net论坛上找到了一个问题/答案,帮助我回答了我的问题: Binding CheckBoxList in FormView
我实现了它:
//设计视图
<asp:CheckBoxList ID="cblHiredStatus" runat="server" DataTextField="hiredstatus" DataValueField="hiredstatus">
<asp:ListItem Value="pending">Pending</asp:ListItem>
<asp:ListItem Value="no">Not Hired</asp:ListItem>
<asp:ListItem Value="yes">Hired</asp:ListItem>
</asp:CheckBoxList>
//代码背后
Dim cblHiredStatus As CheckBoxList = CType(fvRecruitInterviewed.FindControl("cblHiredStatus"), CheckBoxList)
If cblHiredStatus IsNot Nothing Then
Dim csv As String = DataBinder.Eval(fvRecruitInterviewed.DataItem, "HiredStatus").ToString()
If Not String.IsNullOrEmpty(csv) Then
Dim hiredstatus As String() = csv.Split()
For Each str As String In hiredstatus
If cblHiredStatus.Items.FindByValue(str) IsNot Nothing Then
cblHiredStatus.Items.FindByValue(str).Selected = True
End If
Next
End If
End If