【问题标题】:Get Selected Item From Combobox从组合框中获取所选项目
【发布时间】:2014-01-13 20:06:16
【问题描述】:

我有一个包含来自 DataTable 的项目的组合框,ff 在表单加载时执行:

dbConnection = New SqlCeConnection("Data Source=Journal.sdf")
dbDataAdapter = New SqlCeDataAdapter("SELECT * FROM setting_unit", dbConnection)
dbDataAdapter.Fill(dbTable)
cbxSettingsUnit.DataSource = New BindingSource(dbTable, Nothing)
cbxSettingsUnit.DisplayMember = "name"
cbxSettingsUnit.ValueMember = "name"

组合框发生变化时的方法:

Private Sub cbxSettingsUnit_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cbxSettingsUnit.SelectedIndexChanged
   tempString = cbxSettingsBusinessUnit.Items(cbxSettingsBusinessUnit.SelectedItem).ToString
   MessageBox.Show(tempString)
End Sub

行有错误:

tempString = cbxSettingsBusinessUnit.Items(cbxSettingsBusinessUnit.SelectedItem).ToString

如何从组合框中获取所选项目?

【问题讨论】:

    标签: vb.net winforms combobox


    【解决方案1】:

    试试这个:

    combo.datasource = datatable
    combo.displaymember = "abbreviation"
    combo.valuemember = "abbreviation"
    

    然后获取选定的项目使用这个:

    在组合框的 SelectionChangeCommitted 事件上放这个:

        tmpString=combo.selectedvalue
        msgBox(tmpString)
    

    【讨论】:

    • 错误:从“DataRowView”类型到“String”类型的转换无效。
    • 尝试:tmpString=combo.selectevalue.toString
    • 不,当我这样做时,它刚刚返回,System.Data.DataRowView
    • 您在组合框中使用什么事件?在组合框中使用 selectionChangeCommitted EVENT 把这个 tmpString=combo.selectedvalue
    • @PaulPolon:不要使用 SelectionIndexChanged,尝试 SelectionChangeCommitted 然后将此代码放入该事件 tmpString=combo.selectedvalue然后 msgbox(tmpString)
    【解决方案2】:

    你必须使用这个

    tempString = cbxSettingsUnit.Items(cbxSettingsUnit.SelectedIndex).ToString
    

    【讨论】:

    • 你有 web 或 windows 应用程序吗?
    • 我仍然收到错误从类型“DataRowView”到类型“Integer”的转换无效。
    【解决方案3】:

    尝试使用下面的代码

    Try
            DS = New DataSet
            Tabel = "SELECT * FROM setting_unit"
            Dim CB As New OleDb.OleDbDataAdapter(Tabel, dbConnection)
            CB.Fill(DS, "setting_unit")
        '
            Me.cbxSettingsUnit.DataSource = Prf.Tables(0)
    
            Me.cbxSettingsUnit.ValueMember = "name"
            Me.cbxSettingsUnit.DisplayMember = "name"
        Catch ex As Exception
        End Try
    

    【讨论】:

      【解决方案4】:

      大多数具有DataSource 属性的.net “listing-controls” 搜索IListSource 的实现。因此,如果您将DataTable 设置为数据源,您实际上是将DataTable.DefaultView 设置为数据源。

      Me.ComboBox1.DataSource = myDataTabele
      

      等于

      Me.ComboBox1.DataSource = myDataTabele.DefaultView
      

      所以现在你有一个包含 DataRowView 类型项目的 ComboBox。

      Dim selectedRowView As DataRowView = DirectCast(Me.ComboBox1.SelectedItem, DataRowView)
      Dim selectedDisplayMemberValue As String = Me.ComboBox1.SelectedText
      Dim selectValueMemberValue As Object = Me.ComboBox1.SelectedValue
      

      你应该这样做:

      Private Sub cbxSettingsUnit_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cbxSettingsUnit.SelectedIndexChanged
          Dim item As DataRowView = TryCast(Me.cbxSettingsUnit.SelectedItem, DataRowView)
          If (Not item Is Nothing) Then
              With item.Row
                  'You have now access to the row of your table.
                  Dim columnValue1 As String = .Item("MyColumnName1").ToString()
                  Dim columnValue2 As String = .Item("MyColumnName2").ToString()
              End With
          End If
      End Sub
      

      那么为什么会出现错误?是的,您正在尝试将 DataRowView 转换为 Integer。

      '                                                                      |
      tempString = cbxSettingsBusinessUnit.Items(cbxSettingsBusinessUnit.SelectedItem).ToString
      

      【讨论】:

        【解决方案5】:

        试试这个:

        Dim row_v As DataRowView = comboBox1.SelectedItem
                Dim row As DataRow = row_v.Row
                Dim itemName As String = row(0).ToString()
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-04-05
          • 2014-02-06
          • 2019-10-27
          • 1970-01-01
          • 1970-01-01
          • 2020-06-28
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多