ComboBox   zodpovězená otázka

VB.NET

Přeji pěkný večer. Prosím o radu snad s jedním z posledních dotazů.

Mám ComboCox

Plním ho z databáze pomocí "Use data bound items"

To je asi jednoduchý, až na to, že bych v rámci jednoho řádku potřeboval zobrazit "text" dvou sloupců. Konkrétně číslo a název zakázky. Sám zvládnu jen jedno z toho. Lze to vůbec ???? Děkuji za pomoc !!!

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

Ano lze a není zač

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

:-) Dobrá rada k nezaplacení.....

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

Samozřejmě, že to lze. Jest třeba v SQL dotazu nastavit, co má zobrazit, např

SELECT Sloupec0 AS ID, Sloupec1 + ' ' + Sloupec2 AS Nazev FROM Tabulka

pak budete mít na výběr do comboboxu ValueMember = ID, DisplayMember = Nazev,

kde Nazev bude ve formě Sloupec1 Sloupec2

pokud to uděláte takto:

SELECT Sloupec0 AS ID, Sloupec1 + ' (' + Sloupec2 + ')' AS Nazev FROM Tabulka

bude pak Nazev v comboboxu zobrazen jako Sloupec1 (Sloupec2)

A hodnota bude samozřejmě ID.

Doufám, že jsem to napsal dost srozumitelně...

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

Na to nemám..... nemůžu to rozchodit.... :-(

Chápu to vytvoření "virtuálního" sloupce.

Ale když ho zkusím udělat v orginálním

ZakazkyTableAdapter

A upravím (doplním to vytvoření virtuálního sloupce) QUERY Fill,GetData() tak SQL dotaz jako takový funguje, ale při volání

Private Sub SeznamZakazek_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.ZakazkyTableAdapter.Fill(Me.SoWMainDataSet.Zakazky)
End Sub

Tak mi to vyhodí neošetřenou vyjímku

Data conversion failed. [ OLE DB status value (if known) = 0 ]

Počítám, že je to spojeno s tím, že ten vitrtuální sloupec je v režimu readOnly.

Pak jsem zkusil udělat úplně nový TableAdapter s vlastním QUERY a ten zase neumím použít.... :-(

Jsem v háji.... :-(

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

Tak ho zkuste vytvořit v kódu. V návrháři si dejte ComboBox, nepřipojujte jej na žádná data a v události Form_Load si dejte kód pro naplnění.

oledbcon je připojovací řetězec

'Naplnění Comboboxu CB_Zakazky - název firma a město
        Dim dt As DataTable = New DataTable     'tabulka s daty v paměti
        oledbcon.Open()
        Dim strSql As OleDbCommand
        strSql = New OleDbCommand("SELECT Id, CisloZakazky + ' - ' + NazevZakazky AS Zakazka FROM TabulkaZakazky", oledbcon)
        Dim ada As New OleDbDataAdapter(strSql)
        ada.Fill(dt)

        With Me.CB_Zakazky
            .DataSource = dt
            .DisplayMember = "Zakazka"
            .ValueMember = "Id"
        End With
        oledbcon.Close()
nahlásit spamnahlásit spam 0 odpovědětodpovědět

oledbcon.open()

není deklarován......... :-(

Počítám, že mi chybí někde něco v deklaracích v hlavičce

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

Se na to vybodnu.... :-(

Po hledání na NETu mi docvaklo, že je to definice připojení k DB. Tak jsem napsal toto:

Private Sub NaplnComboZakazek()

        Dim ConString As String = "PROVIDER=Microsoft.SQLSERVER.CE.OLEDB.3.5;Data Source=C:\Users\rtesar\Documents\Visual Studio 2010\Projects\SoW\SoW\Bin\Debug\SoWMain.sdf"
        Dim oledbcon As New OleDbConnection(ConString)
        Dim dt As DataTable = New DataTable("Zakazky")        'tabulka s daty v paměti
        oledbcon.Open()
        Dim strSql As OleDbCommand
        strSql = New OleDbCommand("SELECT Id, Cislo + ': ' + Nazev AS PlneJmeno FROM Zakazky", oledbcon)
        Dim ada As New OleDbDataAdapter(strSql)
        ada.Fill(dt)
        With Me.ComboBox1
            .DataSource = dt
            .DisplayMember = "PlneJmeno"
            .ValueMember = "Id"
        End With
        oledbcon.Close()

Ale ouha zase to nejde..... zastaví se to na ada.fill(dt)

System.InvalidOperationException was unhandled

Message=Zprostředkovatel nemohl určit hodnotu Int32. Řádek mohl být například právě vytvořen, výchozí hodnota pro sloupec Int32 není k dispozici a spotřebitel ještě nenastavil novou hodnotu Int32.

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

Nepomoh by v tom dotaze CAST na varchar:

strSql = New OleDbCommand("SELECT Id, CAST(Cislo AS nvarchar) + ': ' + Nazev AS PlneJmeno FROM Zakazky", oledbcon)
nahlásit spamnahlásit spam 0 odpovědětodpovědět

Chlapi jste machři !!!!

Po celém dni trápení do funguje přesně jak má !!!

Díky, díky, díky !!!!!!!!

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

Tak ještě jeden a poslední "zádrhel" což už jsem včera nestihnul ověřit.

Hodnota Combobox1.ValueMember je pro celý Combo string s textem "Id" nikoliv vlastní ID.... :-(

Nechápu proč, myslím, že stejným způsobem jsme naplnili DisplayMemeber a ten je úplně O.K.

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

Hodnota ValueMember samozřejmě bude string "Id", vždyť se tam tak nastavuje. Asi jste chtěl získat vybranou value, na to je vlastnost SelectedValue.

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

Jj.... super... moc díky. To je až školácka chyba.... a neuvědomnění..... Díky za pomoc. Již funguje jak Má !!!!

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

však jsem psal, že oledb je připojovací řetězec...

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