设置asp:在asp:FormView后面的代码中检查CheckBox

时间:2013-07-02 22:09:28

标签: asp.net vb.net

我不知道这是否可行,但如果{{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会很好,如果这更容易/可能

2 个答案:

答案 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