2011-04-12 65 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