将 asp:CheckBox 设置为在 asp:FormView 中的代码后面签入



我不知道这是否可能,但我正在尝试在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

最新更新