我不知道这是否可能,但我正在尝试在FormView
中设置一个asp:CheckBox
,以Checked=True
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
组或RadioButtonList
就可以了,如果这更容易/可能
基于对问题的描述和代码,我愿意冒昧地说问题在于strHiredStatus的价值。
由于正在检查 Pending 中,我们知道代码正在被触发,并且在代码中,pending 是 If 语句中的默认子句,这意味着问题必须与 strHiredStatus 的测试有关。
当您使用等于测试字符串时,它是区分大小写的测试。这意味着"是"与"是"不同。
有不同的方法可以解决这个问题,但我的首选方法是使用 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(不确定字符的正确名称是什么,但是一个不同的字符(。
我在 ASP.Net 论坛上找到了一个问题/答案,帮助我回答了我的问题:绑定复选框列表 在窗体视图中
我像这样实现它:
设计视图
<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