asp.net vb CheckBoxList从CSV中选择

时间:2011-04-12 15:42:31

标签: asp.net vb.net webforms checkboxlist

我正在学习asp.net,并且需要有一个CheckBoxList,如果它们是来自数据库的CSV字符串,那么这些项目最初会被选中。

我已经有了它的工作,虽然我只是想知道我是否已经采用了最好的方式,因为它似乎有点长啰嗦?

感谢您提供的任何帮助。

ASPX

<asp:CheckBoxList ID="rh_type" runat="server" CssClass="chkbox" 
RepeatLayout="Flow" CausesValidation="True">
<asp:ListItem>House</asp:ListItem>
<asp:ListItem>Flat/Apartment</asp:ListItem>
<asp:ListItem>Bungalow</asp:ListItem>
<asp:ListItem>Any</asp:ListItem>
</asp:CheckBoxList>
<br />
<br />
<asp:Button ID="Button1" runat="server" Text="Button" />

CODE

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    Dim i As Integer
    Dim str_rh_type As String = "House,Bungalow"
    Dim split As String() = str_rh_type.Split(","c)

    For Each s As String In split
        'Response.Write(s & "<br />")

        For i = 0 To rh_type.Items.Count - 1
            If rh_type.Items(i).Text = s Then

                rh_type.Items(i).Selected = True

            End If
        Next

    Next s

End Sub

再次感谢 学家

2 个答案:

答案 0 :(得分:1)

您的代码功能正常,但可能会对可维护性进行一些调整会有所帮助。还不确定您是否需要嵌套循环来加载下拉项目。

这应该只是一个参考点,可以自己决定编码实践。当然,对某些人有用的东西对别人不起作用。

以下是我对此进行编码的方式......

ASP.NET控件:

<asp:CheckBoxList ID="CheckBoxListHomeType" runat="server" 
    CssClass="chkbox" RepeatLayout="Flow" CausesValidation="True" />
...
  • CheckBoxListHomeType的ID很容易记住,智能感知会让我完全接受。 (或另一种常见方法是cblHomeType作为ID)。获取intellisense以帮助rh_type这样的名称可能同样容易,但是在维护代码时,类似于控件的ID可以真正有用

VB.NET:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    If Not Page.IsPostBack Then
        LoadHomeTypes()
    End If
End Sub

Protected Sub LoadHomeTypes()
    Dim houseTypes = "House,Bungalow,Flat/Apartment,Any"
    For Each houseType As String In houseTypes.Split(",")
        CheckBoxListHomeType.Items.Add(New ListItem(houseType))
    Next
End Sub
  • 将逻辑保存在单独的LoadHomeTypes函数中可以使代码更具可读性。
  • 在迭代ListItem列表时创建新的homeTypes应该不需要迭代CheckBoxList项目(如果您需要清除现有的项目,可以添加CheckBoxListHomeType.Items.Clear()到功能的顶部)
  • Not Page.IsPostBack检查可以防止每次回发都需要加载下拉值,除非您需要更改它们。

答案 1 :(得分:0)

这是很好的答案,试试这个

Dim ds As DataSet
    ds = Insertstu.searchrec(txtsearch.Text)
    txtnm.Text = ds.Tables(0).Rows(0)("stuname").ToString()
    txtadd.Text = ds.Tables(0).Rows(0)("stuaddress").ToString()
    txtph.Text = ds.Tables(0).Rows(0)("stuph").ToString()
    rdobtnsex.Text = ds.Tables(0).Rows(0)("sex").ToString()
    Dim arr As String()
    Dim quali As String = ds.Tables(0).Rows(0)("qualified").ToString()
    arr = quali.Split(",")
    Dim i As Integer
    For Each itm As String In arr
        For i = 0 To chkqualify.Items.Count - 1
            If chkqualify.Items(i).Text = itm Then
                chkqualify.Items(i).Selected = True
            End If
        Next
    Next

''chkqualify是checkboxlist id