2011-04-12 72 views
0

我正在学习asp.net,需要有一个CheckBoxList,如果这些项目是来自数据库的CSV字符串,那么最初将选择哪些项目。asp.net vb 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 

再次感谢 J.

回答

1

你的代码的功能,但也许有些扭捏作可维护性会有所帮助。也不知道你一定需要嵌套循环来加载你的下拉项目。

这应该只是一个参考点,可以自己做出关于编码实践的决定。当然,对某些人有用的东西不适用于其他人。

以下是我想编写这个...

ASP.NET控件:中CheckBoxListHomeType

<asp:CheckBoxList ID="CheckBoxListHomeType" runat="server" 
    CssClass="chkbox" RepeatLayout="Flow" CausesValidation="True" /> 
... 
  • ID很容易记住和智能会得到我的方式休息。 (或另一种常见方法是将cblHomeType作为ID)。获取智能感知帮助一个名字像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检查可以防止在每次回传时加载下拉值,除非您需要对其进行更改。
+0

感谢您抽出宝贵时间来回答,也有不会因工作的几件事我想要做的,但有一些有用的指针在那里....再次感谢。 – JBoom 2011-04-12 16:38:48

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