Kamis, 16 Desember 2010

Add DataRows to a Combobox in VB.NET without using data binding

Retrieve the data into a DataSet:

Dim strSQL As String = "Select Code,Description From MyTable"
Dim Connection As New OleDbConnection("PROVIDER=....")
Dim DA As New OleDbDataAdapter(strSQL, Connection)
Dim DS As New DataSet

DA.Fill(DS, "Codes")

Populate the ComboBox:

Dim dt As New DataTable = DS.Tables(0)
Dim dr As DataRow
' Populate the Combobox with the Descriptions.
For Each dr In dt.Rows()
cbo.SelectedIndex = -1

To select a Description based on a "Code":

Dim intCBOIndex As Integer = -1

intCBOIndex = GetComboBoxIndexFromValue(cbo, dt, dr("Code"), 1)
cbo.SelectedIndex = intCBOIndex

Private Function GetComboBoxIndexFromValue( _
ByVal theCBO As ComboBox, _
ByVal theDataTable As DataTable, _
ByVal theValue As Object, _
ByVal theValueColumn As Integer) As Integer
' Return the index of the ComboBox item whose associated
' data value matches the passed in value. Data values ARE
' NOT stored in the Combox.
' If the value to look for is blank, get out.
Dim strValue As String = theValue.ToString.Trim
If strValue = "" Then Return -1
' Data values are stored in a DataTable. Filter the datatable
' to find the row containing the value we are looking for.
Dim strDisplayValue As String
Dim strFilter As String

If theDataTable.Columns(theValueColumn).DataType _
Is System.Type.GetType("System.String") Then
strFilter = theDataTable.Columns(theValueColumn).ColumnName & "='" & strValue & "'"
strFilter = theDataTable,Columns(theValueColumn).ColumnName & "=" & strValue
End If
theDataTable.DefaultView.RowFilter = strFilter
' Get the Display value from the datarow and find it in the ComboBox.
If theDataTable.DefaultView.Count = 0 Then
Return -1
strDisplayValue = theDataTable.DefaultView(0)("DESCRIPTION").ToString()
theDataTable.DefaultView.RowFilter = ""
Return theCBO.FindStringExact(strDisplayValue)
End If

Catch ex As Exception
End Try

End Function

Tidak ada komentar:

Posting Komentar