2012-06-12 2 views
3

Я обновляю свой вопрос здесь .. Я использую поле со списком без номера телефона. Я хочу получить номер телефона по одному в переменной. Теперь я использую приведенный ниже код, чтобы получить значения combobox. Но теперь я получаю следующее сообщение об ошибке System.Data.DataRowView. Пожалуйста, помогите мне исправить эту ошибку. Я новичок в vb.net.Итерировать значения элемента управления со списком с помощью vb.net

Мой частичный код здесь ..

 For i = 0 To ComboBox1.Items.Count 
      Dim s As String 

      s = Convert.ToString(ComboBox1.Items(i)) 
     Next i 

ответ

1

Ваша проблема, вероятно, происходит здесь:

s = Convert.ToString(ComboBox1.Items(i)) 

Это не возвращает значение. Он возвращает строковое представление объекта по данному индексу, который, по вашему мнению, имеет тип System.Data.DataRowView.

Вам необходимо будет указать ComboBox1.Items(i) соответствующему типу и получить доступ к его Value. Или, так как св DataRowView, вы можете получить доступ к значениям throgh соответствующих имен столбцов:

Dim row = CType(ComboBox1.Items(i), System.Data.DataRowView) 
s = row.Item("column_name") 

Тем не менее, в первую очередь вы должны определенно закрыть и утилизировать соединение, независимо от того, терпит ли сделка или преуспевает. Это можно сделать в блоке finally (вариант 1) или с оператором using (вариант 2).

Вариант 1

// ... 
con1 = New MySqlConnection(str) 
con1.Open() 
Try 
    // ... 
Catch ex As Exception 
    Lblmsg.Text = " Error in data insertion process....." + ex.Message 
Finally 
    con1.Close() 
    con1.Dispose() 
End Try 

Вариант 2

// ... 
Using con1 as New MySqlConnection(str) 
    con1.Open() 
    Try 
     // ... 
    Catch ex As Exception 
     Lblmsg.Text = " Error in data insertion process....." + ex.Message 
    Finally 
     con1.Close() 
    End Try 
End using 
+0

Пожалуйста, смотрите мой обновленный вопрос ... – Amulraj

+0

@Amulraj Я обновил свой ответ соответственно –

+0

Спасибо так много .. – Amulraj

1

Я не мог найти этот ответ в Интернете в полном объеме, но образует вместе. В фрагменте ниже cbox находится элемент управления ComboBox, который имеет свойства DisplayMember и ValueMember.

Dim itemIE As IEnumerator = cbox.Items.GetEnumerator 
    itemIE.Reset() 
    Dim thisItem As DataRowView 
    While itemIE.MoveNext() 
     thisItem = CType(itemIE.Current(), DataRowView) 
     Dim valueMember As Object = thisItem.Row.ItemArray(0) 
     Dim displayMember As Object = thisItem.Row.ItemArray(1) 
     ' Insert code to process this element of the collection. 
    End While 
1

Это также работает!

 Dim stgTest = "Some Text" 
     Dim blnItemMatched As Boolean = False 

     '-- Loop through combobox list to see if the text matches 
     Dim i As Integer = 0 
     For i = 0 To Me.Items.Count - 1 
      If Me.GetItemText(Me.Items(i)) = stgTest Then 
       blnItemMatched = True 
       Exit For 
      End If 
     Next i 

     If blnItemMatched = False Then 

      Dim stgPrompt As String = "You entered '" & stgTypedValue & "', which is not in the list." 
      MessageBox.Show(stgPrompt, "Incorrect Entry", MessageBoxButtons.OK, MessageBoxIcon.Information) 

      Me.Text = "" 
      Me.Focus() 

     End If 
0

Даже после того, как долго вы будете обратно добиться этого с просто следуя

For Each item As Object In combx.Items 

    readercollection.Add(item.ToString) 

     Next 
5

используется индекс, который равен нулю основе.

изменить это:

For i = 0 To ComboBox1.Items.Count 

к этому:

For i = 0 To ComboBox1.Items.Count - 1 
Смежные вопросы