2012-03-30 3 views
0

У меня есть приложение, которое использует набор из трех комбинированных полей. Мне удалось заполнить каждый снимок в зависимости от выбранного значения предыдущего Единственная проблема заключается в том, что, поскольку данные поступают в базу данных, два выбранных значения из первого поля со списком могут иметь два разных количества элементов в базе данных , так что вторая выпадающая ячейка должна быть заполнена такими данными каждый раз, когда вызывается метод selectedIndex_changed первого выпадающего спискаДинамические выпадающие списки в Visual Basic 2008

, если, например, первый элемент первого сотового блока имеет 10 соответствующих элементов во втором поле со списком и первый второй поле со списком элемент имеет три соответствующих элемента во втором поле со списком, выбирая второй элемент после выбора первого элемента, он приведет к второй выкладке, показывающей три элемента и семь пустых записей, следующих за тремя.

То, что я хочу, чтобы иметь второй выпадающий загруженную с тремя пунктами точно, когда второй элемент в первом поле имеет три элемента в базе данных

Ниже приведен пример

Private Sub cboAccountGroup_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cboAccountGroup.SelectedIndexChanged 
    If mblnAccountGroupFirstLoad = True Then 
     Exit Sub 
    End If 
    Dim index As String 
    index = cboAccountGroup.SelectedValue 
    'Call clearDataEntries() 
    Dim psql As String 
    psql = "Select Account_Type_ID,Description from Tbl_Account_Type Where Account_Group_id=" & index 
    Call setDropDowns(cboAccountType, psql) 
    mblnAccountTypeFirstLoad = False 

End Sub 

В setDropDowns определяется следующим образом:

Public Sub setDropDowns(ByRef combo As ComboBox, ByVal sql As String) 


    Try 
     Dim adaptor As New SqlDataAdapter(sql, mcon) 
     Dim dataset As New DataTable() 
     mcon.Open() 
     adaptor.Fill(DataSet) 
     mcon.Close() 

     combo.DataSource = DataSet 
     combo.DisplayMember = DataSet.Columns(1).ColumnName 
     combo.ValueMember = DataSet.Columns(0).ColumnName 


    Catch ex As Exception 
    Finally 
     'mcon.Close() 

    End Try 

End Sub 

Пожалуйста, помогите.

ответ

1

Я изменил код на несколько, чтобы выглядеть следующим образом:

'Build functions that return data, and keep them separate from code that updates your UI 
Public Function GetAccountTypesByAccountID(ByVal AccountGroupID As Integer) As DataTable 

    Dim sql As String = "SELECT Account_Type_ID,Description FROM Tbl_Account_Type Where Account_Group_id= @AccountGroupID" 
    Dim result As New DataTable() 

    'Create a new connection each time. Really! Thanks to connection pooling, this is the way to go 
    Using mcon As New SqlConnection(GetConnectionString()), _ 
      cmd As New SqlCommand(sql, mcon) 

     'USE PARAMETERIZED QUERIES!! 
     cmd.Parameters.Add("@AccountGroupID", SqlDbTypes.Int).Value = AccountGroupID 

     'The Using block will make sure the connection is closed, even if an exception is thrown 
     mcon.Open() 
     Using rdr As SqlDataReader = cmd.ExecuteReader() 
      result.Load(rdr) 
     End Using 
    End Using 
    Return result 
End Function 


Private Sub cboAccountGroup_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cboAccountGroup.SelectedIndexChanged 
    If mblnAccountGroupFirstLoad Then Exit Sub 
    mblnAccountTypeFirstLoad = False 

    ' clearDataEntries() 

    Dim AccountTypes As DataTable = GetAccountTypesByAccountID(Integer.Parse(cboAccountGroup.SelectedValue)) 

    cboAccountType.DisplayMember = AccountTypes.Columns(1).ColumnName 
    cboAccountType.ValueMember = AccountTypes.Columns(0).ColumnName 
    cboAccountType.DataSource = AccountTypes 'Set datasoure LAST 

End Sub 
+0

спасибо это помогло мне получить решение – Tamseyc

Смежные вопросы