2013-07-02 36 views
2

我不知道这甚至有可能,但我想设置一个asp:CheckBox,在FormView,以Checked=True如果在database = yes|no|pending etc值.. 。设置ASP:在ASP代码检查背后的CheckBox:FormView控件

这里是后面的代码(在预渲染子):

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基于问题和代码的说明就可以了,如果是比较容易/可能

回答

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 
0

,我愿意走出去的肢体和说的问题是strHiredStatus的值。

由于Pending得到检查,我们知道代码被解雇,并且在代码中,pending是If语句中的默认子句,这意味着问题必须与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(不确定字符的正确名称是什么,但是是不同的字符)。

+0

感谢您的建议,但它仍然o只是为测试标签工作(并且正在检查中)。 – IanMitz

+0

@IanMitz:测试标签说什么? –

+0

无论相关的字段是在数据库中。即是,否或未决(lblTestHiredStatus.Text = strHiredStatus) – IanMitz