2015-04-17 62 views
2

我的表單上有大約15個組合框,全部使用從表中抽取的相同信息加載(〜150個條目)。目前我正在從表中獲取信息,然後循環查看條目並將其添加到每個文本框中。我想知道是否有一種更有效的方法來加載這些組合框,然後必須單獨將表項添加到每個組合框中,必須在For循環中列出15行代碼。用一行代碼加載組合框?

我沒有看到這方面的任何性能問題,但認爲我可能會以最有效的方式工作,而不是堅持有效的方法。 :)

+2

添加一些代碼,將有助於使問題更加清晰。 – Neolisk

回答

5

您可以創建組合框的列表,然後通過它們循環。例如:

Dim cbos() As ComboBox = {ComboBox1, ComboBox2, ComboBox3} 
For Each cbo As ComboBox In cbos 
    ' Load cbo from table 
Next 

或者,如果他們被統一進行命名,你可以通過名稱查找組合框:

For i As Integer = 1 to 15 
    Dim cbo As ComboBox = DirectCast(Controls("ComboBox" & i.ToString())), ComboBox) 
    ' Load cbo from table 
Next 
+1

未提及的另一種方法是循環訪問公共容器(如groupbox)內的所有控件。 – Neolisk

2

由於組合框項目是一個集合,如果它們的元素都是一樣的,你可以用你想插入的對象構建陣列,然後用方法AddRange()(這是一個存在於Combobox.items中的方法)將這個數組插入到每個ComboBox中。

充分利用MSDN的例子:

Dim installs() As String = New String() {"Typical", "Compact", "Custom"} 
ComboBox1.Items.AddRange(installs) 

那麼你就只需要做一個循環到陣列添加到每個組合框。當然,你需要首先建立自己的數組,而不是這個例子中的簡單字符串數組。

參考:

MSDN - AddRange

+0

+1我想提到這一點,雖然我不認爲這是OP的核心問題。我認爲循環使用組合框更爲重要,正如我在回答中所述。無論哪種方式,這是很好的信息。不過,我想補充一點,使用'DataSource'屬性是'AddRange'的另一種流行替代方法,儘管我個人更喜歡'AddRange'。 –

+0

現在你說@StevenDoggart,我不確定問題是不得不重複相同的操作,或者需要將它寫入每個組合框。如果它是最後一個(正如我現在認爲我再次嘗試過),那麼真正問題的正確答案就是你的問題。 +1;) –

2

你也可以做這種方式,因爲你提到你已經有一個表。

  1. 將DataTable

更改您的表對象到一個DataTable,這將有助於結合的組合框。如果您也將數據表添加到數據集,可能會有所幫助。通過這種方式,您可以將所有ComboBoxes(即允許用戶查看信息的UI元素)附加到數據集中相同的DataSource(它是數據表)。

  • 綁定
  • 現在,所有你需要做的是遍歷所有組合框和數據源設置爲相同的表,那就是如果你決定以編程方式做到這一點像這樣:

    ComboBox1.DataSource = ds.Tables(0) 
    ComboBox1.ValueMember = "au_id" 
    ComboBox1.DisplayMember = "au_lname" 
    

    在此進一步的教程,上述發現here

    然後可以還可以獲得用戶選擇的值與的實施例。另一方面,如果你用C#WPF做了這個,你可以直接綁定XAML中的每個組合框,但我不確定這是否可以在VB中完成。網絡,因爲我試圖尋找的選擇,但沒有設法這樣做,你可能想嘗試儘管。

    一些非常有用的教程和指南的數據綁定,這你可能會感興趣:

    表示推薦閱讀你的問題

    MSDN: Connect data to objects

    DotNetPerls on DataGridView(注意,這是不是一個組合框,只顯示數值)

    VBNet DataTable Usage from DotNetPerls(這是相對於1)

    SO Q&A on Binding a comboBox to a datasource

    Concepts of Databinding