ComboBox VB.NET vs. ComboBox MS ACCESS 2000 - 2007   otázka

VB.NET, WinForms, Databáze

Zdravím, řeším něco na způsob multi Comboboxu. V MS Accessu 2000 atd. je combobox, ve kterém mohu zobrazit více sloupců. Bohužel ve VB.NET ComboBox nabízí pouze dva sloupce ValueMember a DisplayMember. V Accesu jsem totiž do ComboBoxu načetl např. 10 záznamů, který měl 3 sloupce a pak jsem při výběru záznamu z ComboBoxu mohl z těch tří sloupců ty data použít. Viz.

Hodnota1 = Me.ComboBox.column(0)

Hodnota2 = Me.ComboBox.column(1)

Hodnota3 = Me.ComboBox.column(3)

Zajímalo by mě jak toho mám dosáhnou ve VB.NET. Napadá mě řešení, že když už mám načtené data v DataTeble, tak bych po události ComboBox1_TextChanged, nějakým způsobem provedl select v DataTable a tyto vybrané hodnoty předal do TextBoxu na formuláři. Ale nevím jak to realizovat, pomůženěkdo? Předem děkuji

Imports System
Imports System.Data
Imports System.Data.SqlClient

Public Class FRM_ComboBox

    Public dt As New DataTable

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
‚ Provede se načtení dat z SQL serveru do DataTable, následně se data interpretují do ComboBoxu
        Dim con As New SqlClient.SqlConnection
        Dim cmd As New SqlClient.SqlCommand
        Dim da As New SqlClient.SqlDataAdapter(cmd)
        con.ConnectionString = "server=DOMACI;integrated Security=SSPI;DATABASE=Test;"
        con.Open()
        cmd.CommandText = "test_sel" ' Tabulka: ID, Popis1, Popis2, Popis3
        cmd.CommandType = CommandType.StoredProcedure
        cmd.Connection = con

        da.Fill(dt)

        With Me.ComboBox1
            .DataSource = dt
            .DisplayMember = "popis1"
            .ValueMember = "ID"
        End With

        con.Close()
        con = Nothing
    End Sub


    Private Sub ComboBox1_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBox1.TextChanged
‚ Událost ComboBoxu TextChanged
‚ a z Comboboxu bych zde zjistil ID číslo vybraného záznamu a následně bych nějakým způsobem vytáhnul řádek z DataTable, který odpovídá ID číslu, ale jak to udělat fakt netuším.
        Me.ID.text = "ID číslo"
        Me.t1.Text = "hodnota z pole1"
        Me.t2.Text = "hodnota z pole2"
        Me.t3.Text = "hodnota z pole3"
    End Sub
End Class

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Chcete-li zobrazovat více sloupců, můžete použít k tomu určený ovládací prvek, např. ListView.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Rád ybch využil ten ComboBox. Na netu jsem našel pár komponent (pro VB.NET), které jsu upraveny ala ACCESS 2000 ComboBox, ale jejich obsluha a práce s něma není ideální.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Tak, a už to dělá to co jsem chtěl. V případě, že by měl někdo vylepšení pro tento kod, budu rád, když ho sem dáte.

Imports System
Imports System.Data
Imports System.Data.SqlClient

Public Class FRM_ComboBox
    Public dt As New DataTable
#Region "Při spuštění formuláře"
    Private Sub FRM_ComboBox_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        Dim con As New SqlClient.SqlConnection
        Dim cmd As New SqlClient.SqlCommand
        Dim da As New SqlClient.SqlDataAdapter(cmd)

        con.ConnectionString = "server=DOMACI;integrated Security=SSPI;DATABASE=MPO;"
        con.Open()
        With cmd
            .CommandText = "PAVEL_Test_Proc" ' Procedura vypadá takto: Select id, pops1, popis2, popis3 FROM Test
            .CommandType = CommandType.StoredProcedure
            .Connection = con
        End With
        da.Fill(dt)

        With Me.ComboBox1
            .DataSource = dt
            .DisplayMember = "Popis1"
            .ValueMember = "ID"
        End With

        con.Close()
        con = Nothing
    End Sub
#End Region

#Region "Po výběru dat z ComboBoxu"
    Private Sub ComboBox1_DropDownClosed(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBox1.DropDownClosed

        Dim MyDataRow As DataRow
        Dim p1 As String = ""
        Dim p2 As String = ""
        Dim p3 As String = ""

        For Each MyDataRow In dt.Rows
            If Convert.ToInt32(MyDataRow("ID")) = Me.ComboBox1.SelectedValue Then
                p1 = MyDataRow("Popis1")
                p2 = MyDataRow("Popis2")
                p3 = MyDataRow("Popis3")
                GoTo ZobrazData
            End If
        Next
ZobrazData:
        MessageBox.Show("" & p1 & " - " & p2 & " - " & p2 & "")

    End Sub
#End Region

End Class
nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Zdravím,

tento kód mi pomohl, díky ;)

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback