[C#]data zoeken in combobox

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • pkouwer
  • Registratie: November 2001
  • Laatst online: 13-09 21:05
wsl. een redelijke basic-vraag, maar ik heb al op Internet gezocht en kan het niet (goed) vinden, of ik kijk erover heen. Het volgende is het geval:

Ik ben bezig een applicatie te maken die o.a. een tabel uit de database haalt en deze in een combobox plaatst:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
                conn2.Open();
                SqlDataReader rdr = cmd2.ExecuteReader();

                DataTable dt = new DataTable();
                dt.Columns.Add("id", typeof(string));
                dt.Columns.Add("bedrijfsnaam", typeof(string));
                dt.Columns.Add("contactpersoon", typeof(string));
                dt.Columns.Add("adres", typeof(string));
                dt.Columns.Add("postcode", typeof(string));
                dt.Columns.Add("plaats", typeof(string));
                dt.Columns.Add("telefoonnummer", typeof(string));

                
                while (rdr.Read())
                {
                    dt.Rows.Add(new object[] { rdr[0].ToString(),  rdr[1].ToString(),rdr[2].ToString(),rdr[3].ToString(),rdr[4].ToString(),rdr[5].ToString(),rdr[6].ToString() });

                }
                comboBox2.DisplayMember = "bedrijfsnaam";
                comboBox2.ValueMember = "id";
                comboBox2.DataSource = dt;
                comboBox2.SelectedIndex = 1;
                
                rdr.Close();


Het punt is nu dat ik in een later stadium in hetzelfde form, de gegevens van het geselecteerde bedrijf wil weten, maar ik kan niet vinden hoe ik dit moet aanpakken.

Natuurlijk kan ik op basis van de gekozen bedrijfsnaam een SQL-query uitvoeren, maar dat schiet volgens mij z'n doel voorbij....

Acties:
  • 0 Henk 'm!

  • Mastermind
  • Registratie: Februari 2000
  • Laatst online: 13-09 21:30
DataRow row = comboBox2.SelectedItem as DataRow;

[ Voor 46% gewijzigd door Mastermind op 18-02-2009 08:47 ]


Acties:
  • 0 Henk 'm!

  • YakuzA
  • Registratie: Maart 2001
  • Niet online

YakuzA

Wat denk je nou zelluf hey :X

Je kan natuurlijk op de datasource van de combobox een select doen:
C#:
1
ComboBox2.DataSource.Select('insert query');

[ Voor 13% gewijzigd door YakuzA op 18-02-2009 08:45 ]

Death smiles at us all, all a man can do is smile back.
PSN


Acties:
  • 0 Henk 'm!

  • BM
  • Registratie: September 2001
  • Laatst online: 20:27

BM

Moderator Spielerij
Mastermind schreef op woensdag 18 februari 2009 @ 08:43:
Wat dacht je van comboBox2.SelectedValue?
Volgens mij wil ik detailinformatie ophalen op basis van de waarde in de combobox.

Ik zie niet in waarom het een probleem zou zijn om op dat moment een nieuwe query uit te voeren om die informatie op te halen?
Niet goed gelezen, die gegeven zijn al bekend op dat moment....

[ Voor 8% gewijzigd door BM op 18-02-2009 08:57 ]

Xbox
Even the dark has a silver lining | I'm all you can imagine times infinity, times three


Acties:
  • 0 Henk 'm!

  • pkouwer
  • Registratie: November 2001
  • Laatst online: 13-09 21:05
op zich is het ook geen probleem, maar als ik, zoals in de code staat een dt.rows.add kan doen, dan moet ik toch ook in staat zijn om de data uit de gekozen rij er uit te halen.

Ik kom nl. uit het VB6 tijdperk en wil mezelf C# aanleren, op een juiste wijzen. Natuurlijk kan ik alles rechtstreeks uit de database halen.

Acties:
  • 0 Henk 'm!

  • Mastermind
  • Registratie: Februari 2000
  • Laatst online: 13-09 21:30
Idd, je moet het item casten naar een DataRow, daar staan dan de waarden in. (Heb het geëdit).

Acties:
  • 0 Henk 'm!

  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

SelectedItem geeft de DataRow terug (niet vergeten te casten) wat nog iets gemakkerlijker kan zijn aangezien er waarschijnlijk meer nodig is dan alleen het ID.


Los daarvan vind ik best wel schokkend dat je zo'n antwoord niet op internet of zelfs met de F1 toets in Visual Studio hebt kunnen vinden.

Ander punt. Waarom geeft de Reader niet direct de juiste gegevens terug? Misschien moet je ook eens kijken naar de SqlDataAdapter class.

Het voelt allemaal alsof je niet echt begrijpt of weet waarmee je bezig bent..

If it isn't broken, fix it until it is..


Acties:
  • 0 Henk 'm!

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 20:22

Haan

dotnetter

Kan je ook niet beter databinding gebruiken, in plaats van met een while loop je combobox te vullen?

Kater? Eerst water, de rest komt later


Acties:
  • 0 Henk 'm!

  • pkouwer
  • Registratie: November 2001
  • Laatst online: 13-09 21:05
Niemand_Anders schreef op woensdag 18 februari 2009 @ 08:49:


Het voelt allemaal alsof je niet echt begrijpt of weet waarmee je bezig bent..
dit klopt wel een beetje, vandaar dit projectje. om mezelf e.e.a. aan te leren.

Acties:
  • 0 Henk 'm!

  • pkouwer
  • Registratie: November 2001
  • Laatst online: 13-09 21:05
Niemand_Anders schreef op woensdag 18 februari 2009 @ 08:49:


Ander punt. Waarom geeft de Reader niet direct de juiste gegevens terug? Misschien moet je ook eens kijken naar de SqlDataAdapter class.
wat bedoel je hiermee ? De tabel met afleveradressen wordt netjes in de combobox geladen, dus dat is het probleem niet. Het punt is nl. alle overige data (adresgegevens) op basis van de gekozen bedrijfsnaam verder gebruiken in het programma. Met een zoekfunctie o.i.d. Ik kan natuurlijk wel een SQL-query uitvoeren op basis van de gekozen bedrijfsnaam.

Acties:
  • 0 Henk 'm!

  • EfBe
  • Registratie: Januari 2000
  • Niet online
Niemand_Anders schreef op woensdag 18 februari 2009 @ 08:49:
SelectedItem geeft de DataRow terug (niet vergeten te casten) wat nog iets gemakkerlijker kan zijn aangezien er waarschijnlijk meer nodig is dan alleen het ID.
Volgens mij geeft hij een DataRowView terug, omdat DataTable IListSource implementeert en altijd bindt via een DataView in complex binding scenarios (waar we hier, bij gebrek aan code maar even vanuit gaan).
Los daarvan vind ik best wel schokkend dat je zo'n antwoord niet op internet of zelfs met de F1 toets in Visual Studio hebt kunnen vinden.
Waarom? Hij stelt een vraag die blijk geeft van het niet snappen wat er precies gebeurt, en dat leidt steevast tot de verkeerde zoektermen.

SelectedText geeft de bedrijfsnaam aan (dus de value die te zien is in de combobox). Die kun je dan weer verder gebruiken. Als je ValueMember definieert als "id" (ik neem aan dat je DisplayMember hebt gedefinieerd als "bedrijfsnaam"), dan kun je de id value verkrijgen door SelectedValue uit te lezen van de combobox.

Het is allemaal niet zo moeilijk, gewoon de winforms ComboBox documentatie even doornemen.

[ Voor 20% gewijzigd door EfBe op 18-02-2009 11:24 ]

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Haan schreef op woensdag 18 februari 2009 @ 08:54:
Kan je ook niet beter databinding gebruiken, in plaats van met een while loop je combobox te vullen?
Hij vult zijn ComboBox ook gewoon met databinding, alleen zijn DataTable vult hij met een loop en een DataReader, zoals al gezegd zou hij eens naar een (Sql)DataAdapter kunnen kijken.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • pkouwer
  • Registratie: November 2001
  • Laatst online: 13-09 21:05
EfBe schreef op woensdag 18 februari 2009 @ 11:20:
[...]


SelectedText geeft de bedrijfsnaam aan (dus de value die te zien is in de combobox). Die kun je dan weer verder gebruiken. Als je ValueMember definieert als "id" (ik neem aan dat je DisplayMember hebt gedefinieerd als "bedrijfsnaam"), dan kun je de id value verkrijgen door SelectedValue uit te lezen van de combobox.
tot zover had ik het inderdaad al begrepen, maar mijn punt is hoe ik b.v. contactpersoon kan verkrijgen van het geselecteerde bedrijf.

Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Zoals gezegd kan je dat bereiken door de SelectedItem property te gebruiken en die naar het juiste type (DataRowView volgens mij) te casten. Met die DataRowView is dan weer al je data toegankelijk.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

Verwijderd

Oke misschien begrijp ik je vraag niet helemaal maar het zoals ik het lees wil je een combobox vullen met alle data die je uit een tabel haalt (een of andere bedrijfs tabel) en dan moet je als je een van de bedrijven uit de combobox kiest alle informatie van dat bedrijf kunnen halen?
Als dit is wat je wilt doen, dan moet je een object(class) maken waarin al die gegevens die per bedrijf uit de database gehaald worden kunnen worden gezet. als je bij zo'n object de ToString methode override met wat jij wil dat de combobox laat zien per item dan kun je gewoon de objecten toevoegen aan je combobox. Wanneer je dan een item selecteerd in de combobox kun je die type casten naar het juiste object en alle gegevens aan. Ik wil geen detail voorbeeld geven omdat ik niet zeker ben of dit wel is waar naar je opzoek bent..

  • pkouwer
  • Registratie: November 2001
  • Laatst online: 13-09 21:05
ik zal het proberen iets beter uit te leggen.

Ik heb een tabel in een MSSQL-database, genaamd afleveradressen. In deze tabel heb ik een aantal velden id,bedrijfsnaam,adres,postcode en plaats. Ik wil op mijn formulier een combobox plaatsen met als teksten de bedrijfsnamen uit de genoemde tabel.

Als ik dan een bedrijfsnaam selecteer in de combobox, moeten de textboxen op dat zelfde formulier gevuld worden met de overige velden welke bij het gekozen bedrijf horen.

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

Ik denk dat je beter de data ophaalt, en daarna in objecten (bvb Bedrijf) plaatst, en die dan bind op de list.

Dan krijg je op selectedItem een Object terug, wat je cast naar jouw object, Bedrijf, en daarna kan je heel gemakkelijk aan die properties.

Going for adventure, lots of sun and a convertible! | GMT-8


  • EfBe
  • Registratie: Januari 2000
  • Niet online
pkouwer schreef op donderdag 19 februari 2009 @ 07:54:
ik zal het proberen iets beter uit te leggen.

Ik heb een tabel in een MSSQL-database, genaamd afleveradressen. In deze tabel heb ik een aantal velden id,bedrijfsnaam,adres,postcode en plaats. Ik wil op mijn formulier een combobox plaatsen met als teksten de bedrijfsnamen uit de genoemde tabel.

Als ik dan een bedrijfsnaam selecteer in de combobox, moeten de textboxen op dat zelfde formulier gevuld worden met de overige velden welke bij het gekozen bedrijf horen.
En dat lukte niet? Heb je uberhaupt al geprobeerd wat hier is gezegd? Databinding mbv BindingSource zoeken:
http://lmgtfy.com/?q=BindingSource+data+binding+tutorial

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


  • pkouwer
  • Registratie: November 2001
  • Laatst online: 13-09 21:05
EfBe schreef op donderdag 19 februari 2009 @ 09:08:
[...]

En dat lukte niet? Heb je uberhaupt al geprobeerd wat hier is gezegd? Databinding mbv BindingSource zoeken:
http://lmgtfy.com/?q=BindingSource+data+binding+tutorial
nee, dat klopt: het lukte niet ! Het is me ondertussen inderdaad gelukt met behulp van de anderen hier en internet. Als je niet weet in welke richting je het moet zoeken, dan wordt het lastig he...

Ik heb mooie voorbeelden gevonden die ik eens goed ga bestuderen, want volgens mij is databinding een krachtig iets.
Pagina: 1