[C#] Gegevens datagridview opslaan in database

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Aurora
  • Registratie: Augustus 2005
  • Laatst online: 16-09 23:20
Via een button laad ik een XML bestand in een dataGridView.
Vervolgens wil ik deze geladen data opslaan in de gekopppelde database. Bij het laatste kom ik echter niet uit. Ik heb het volgende:

Laden XML:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
private void Openen_Click(object sender, EventArgs e)
        {
           DataSet bakker2 = new DataSet("Bestelling");
         
            OpenFileDialog fd = new OpenFileDialog();
            fd.ShowDialog();
            label1.Text = fd.FileName;

            bakker2.ReadXml(label1.Text = fd.FileName);
            dataGridView1.DataSource = bakker2;
            dataGridView1.DataMember = "Bestelling";
           // dataGridView1.CaptionText = dataGridView1.DataMember;     
        }


Opslaan in database:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
private void Save_Click(object sender, EventArgs e)
        {
            try
            {
                this.Validate();        
                this.bestellingBindingSource.EndEdit();
                this.bestellingTableAdapter.Update(this.bakkerDataSet.Bestelling);

                MessageBox.Show("Update successful");
            }
            catch (System.Exception ex)
            {
                MessageBox.Show("Update failed");
            }
        }


Wie kan mij hierbij helpen? :)

[ Voor 21% gewijzigd door Aurora op 10-07-2011 16:24 . Reden: Foutje bij het kopieren aangepast! ]

Don't forget the Cloud is just someone else's computer


Acties:
  • 0 Henk 'm!

  • Reptile209
  • Registratie: Juni 2001
  • Laatst online: 01:05

Reptile209

- gers -

Even zonder naar je code te kijken: wat gebeurt er nu, en wat had je verwacht dat er zou gebeuren?

Zo scherp als een voetbal!


Acties:
  • 0 Henk 'm!

  • kemphaas
  • Registratie: November 2004
  • Laatst online: 14-09 09:31
Even door wel naar je code te kijken, je read en write functie zijn exacte kopieën van elkaar. Foutje in je code, of foutje met het kopiëren naar tweakers?

[ Voor 40% gewijzigd door kemphaas op 10-07-2011 15:56 ]

Werk hard als je tijd hebt, dan heb je tijd als je hard moet werken.


Acties:
  • 0 Henk 'm!

  • Ventieldopje
  • Registratie: December 2005
  • Laatst online: 17-09 10:59

Ventieldopje

I'm not your pal, mate!

Ok waarom heb je bij het opslaan in de database dezelfde code als het lezen van de xml? :+

Wat je moet doen is een Dataset (gekoppelt aan je database) maken en daar je XML in laden (wat je nu al doet) en dan je datagrid binden aan het dataset ;)

[ Voor 46% gewijzigd door Ventieldopje op 10-07-2011 15:57 ]

www.maartendeboer.net
1D X | 5Ds | Zeiss Milvus 25, 50, 85 f/1.4 | Zeiss Otus 55 f/1.4 | Canon 200 f/1.8 | Canon 200 f/2 | Canon 300 f/2.8


Acties:
  • 0 Henk 'm!

  • Acid_Burn
  • Registratie: Augustus 2001
  • Laatst online: 17:14

Acid_Burn

uhuh

Je hebt daar 2x dezelfde code ;)

Je zou eens naar sqlbulkcopy kunnen kijken. Dan kan je in 1 keer heel je datatable schrijven naar een tabel.

Glass Eye Photography | Zelfbouw wireless fightstick | Mijn puzzel site


Acties:
  • 0 Henk 'm!

  • Aurora
  • Registratie: Augustus 2005
  • Laatst online: 16-09 23:20
Mijn excuses iedereen..er ging blijkbaar iets fout bij het kopieren naar het forum toe ... de code is aangepast! Kunnen jullie nogmaals kijken? :)

[ Voor 20% gewijzigd door Aurora op 10-07-2011 16:27 ]

Don't forget the Cloud is just someone else's computer


Acties:
  • 0 Henk 'm!

  • Reptile209
  • Registratie: Juni 2001
  • Laatst online: 01:05

Reptile209

- gers -

Ik herhaal :) : Even zonder naar je code te kijken: wat gebeurt er nu, en wat had je verwacht dat er zou gebeuren?

Zo scherp als een voetbal!


Acties:
  • 0 Henk 'm!

  • Aurora
  • Registratie: Augustus 2005
  • Laatst online: 16-09 23:20
Reptile209 schreef op zondag 10 juli 2011 @ 16:37:
Ik herhaal :) : Even zonder naar je code te kijken: wat gebeurt er nu, en wat had je verwacht dat er zou gebeuren?
Wat nu gebeurt: XML file wordt in de dataGridView geladen en getoond. Vervolgens wil ik de data bijwerken in de gekoppelde database. Hiervoor druk ik de bijhorende button in en krijg een succesvolle melding, die ik met de event handler heb ingesteld. Er wordt dus geen fout gegenereerd.

Ik verwacht: Database is bijgewerkt. De database wordt echter niet bijgewerkt..

[ Voor 4% gewijzigd door Aurora op 10-07-2011 16:58 ]

Don't forget the Cloud is just someone else's computer


Acties:
  • 0 Henk 'm!

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

Haan

dotnetter

Is die Update method een void method, of geeft het ook nog iets terug (volgens mij is gebruikelijk dat aantal bijgewerkte rows wordt teruggegeven)?

Kater? Eerst water, de rest komt later


Acties:
  • 0 Henk 'm!

  • YakuzA
  • Registratie: Maart 2001
  • Niet online

YakuzA

Wat denk je nou zelluf hey :X

Ik zie in je save functie nergens een verwijzing naar 'dataGridView1.DataSource' , dus hoe verwacht je dat die data dan opgeslagen word in je DB?

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


Acties:
  • 0 Henk 'm!

  • Aurora
  • Registratie: Augustus 2005
  • Laatst online: 16-09 23:20
YakuzA schreef op zondag 10 juli 2011 @ 18:20:
Ik zie in je save functie nergens een verwijzing naar 'dataGridView1.DataSource' , dus hoe verwacht je dat die data dan opgeslagen word in je DB?
Kun je mij vertellen hoe ik dit het best kan definiëren? Ik dacht namelijk dat de verwerking middels een adapter.update methode wordt toegepast.

EDIT: Nog vergeten te vermelden. Ik heb de regel dataGridView1.CaptionText = dataGridView1.DataMember; uitgecomment, omdat CaptionText een fout geeft. Ik weet eigenlijk niet wat dit stukje precies doet en of het essentieel is voor de werking.

[ Voor 36% gewijzigd door Aurora op 10-07-2011 19:52 ]

Don't forget the Cloud is just someone else's computer


Acties:
  • 0 Henk 'm!

  • Acid_Burn
  • Registratie: Augustus 2001
  • Laatst online: 17:14

Acid_Burn

uhuh

Ik zie even niet waar je uberhaubt een database verbinding maakt. Je zegt dat de gekoppelde database bijgewerkt moet worden. Welke DB dan? De datagrid heeft als bron de datatable die je gedefinieerd hebt. Die wordt wel gevuld met de XML, maar meer ook niet. Die heeft ook geen DB koppeling. Of mis ik hier iets?

Nogmaals ik zou gewoon die dataset middels een sqlbulkcopy in je database schieten.

Glass Eye Photography | Zelfbouw wireless fightstick | Mijn puzzel site


Acties:
  • 0 Henk 'm!

  • Ventieldopje
  • Registratie: December 2005
  • Laatst online: 17-09 10:59

Ventieldopje

I'm not your pal, mate!

Caption is zoals de naam al doet vermoeden de titel van de datagrid die weergegeven zal worden, die moet dus een string hebben en geen object ;)

Wat betreft het opslaan, je moet nog even dit aanroepen na de update:

C#:
1
this.bakkerDataSet.AcceptChanges();

www.maartendeboer.net
1D X | 5Ds | Zeiss Milvus 25, 50, 85 f/1.4 | Zeiss Otus 55 f/1.4 | Canon 200 f/1.8 | Canon 200 f/2 | Canon 300 f/2.8


Acties:
  • 0 Henk 'm!

  • Aurora
  • Registratie: Augustus 2005
  • Laatst online: 16-09 23:20
Acid_Burn schreef op zondag 10 juli 2011 @ 20:21:
Ik zie even niet waar je uberhaubt een database verbinding maakt. Je zegt dat de gekoppelde database bijgewerkt moet worden. Welke DB dan? De datagrid heeft als bron de datatable die je gedefinieerd hebt. Die wordt wel gevuld met de XML, maar meer ook niet. Die heeft ook geen DB koppeling. Of mis ik hier iets?

Nogmaals ik zou gewoon die dataset middels een sqlbulkcopy in je database schieten.
Wat jij zegt klopt..ik heb het verkeerd geformuleerd. Ik heb een tabel als datasource gedefinieerd.
Sqlbulkcopy kan ik niet gebruiken, omdat het om een simpele Access DB gaat.
Ventieldopje schreef op zondag 10 juli 2011 @ 20:21:
Caption is zoals de naam al doet vermoeden de titel van de datagrid die weergegeven zal worden, die moet dus een string hebben en geen object ;)

Wat betreft het opslaan, je moet nog even dit aanroepen na de update:

C#:
1
this.bakkerDataSet.AcceptChanges();
Dat "caption" stukje is dus essentieel? Hoe voeg ik dit correct toe? Ik heb de code van hierboven toegevoegd, alleen dat helpt helaas niet.

Don't forget the Cloud is just someone else's computer


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Aurora1110 schreef op zondag 10 juli 2011 @ 21:30:
Dat "caption" stukje is dus essentieel?
Waar haal je dat dan vandaan :? Het is helemaal niet essentieel; het is de titel van de datagrid; net al de titel van een form of de titel van een optiongroup. Boeie.

Verder vind ik het "hou mijn handje eens vast" gehalte in dit topic véél te hoog liggen en schurkte de topicstart al behoorlijk tegen een Kan iemand even...? aan en de volgende reply des te meer ondanks dat je toch al zinnige input had. Ik zou dus vanaf dit punt ook graag wat meer eigen inzet zien (tip: lees eens wat documentatie en, als je je helemaal wil uitleven, volg eens een tutorial) want nu zit je gewoon passief te wachten tot iemand het antwoord op een zilveren schaaltje komt aanreiken.

[ Voor 9% gewijzigd door RobIII op 10-07-2011 23:22 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Armageddon_2k
  • Registratie: September 2002
  • Laatst online: 17-09 15:01

Armageddon_2k

Trotse eigenaar: Yamaha R6

Misschien even een stomme vraag hoor, maar waarom wil je een XML file laden, en dan in een database opslaan?
Is het niet een heel stuk makkelijker om een van beiden te doen?

Acties:
  • 0 Henk 'm!

  • Azer
  • Registratie: Oktober 2003
  • Niet online
Armageddon_2k schreef op maandag 11 juli 2011 @ 11:02:
Misschien even een stomme vraag hoor, maar waarom wil je een XML file laden, en dan in een database opslaan?
Is het niet een heel stuk makkelijker om een van beiden te doen?
Een reden kan zijn dat de data van een externe partij komt, die aangeleverd wordt in XML ;)

Acties:
  • 0 Henk 'm!

Verwijderd

Het is al weer even geleden dat ik heb gewerkt met DataBinding in C# 8)7
Met welke gegevens update je de database?
  1. dataGridView1.DataSource = bakker2;
  2. this.bestellingTableAdapter.Update(this.bakkerDataSet.Bestelling); // moet dit niet zijn this.bestellintTableAdapter.Update(this.dataGridView1.DataSource); oid?
Alleen nu leg je volgens mij te veel verantwoordelijkheid bij de GridView (Presentatie).
Als je van je DataSet bakker2 een class variable maakt ipv lokaal kan je databinding toepassen en deze regel gebruiken;
  1. dataGridView1.DataSource = bakker2;
  2. dataGridView1.DataBind(); // nu worden veranderingen in je GridView doorgevoerd in de DataSet.
  3. this.bestellingTableAdapter.Update(this.bakker2);
En verders, tenzij er een exceptie optreed in een van deze drie regels;
  1. this.Validate();
  2. this.bestellingBindingSource.EndEdit();
  3. this.bestellingTableAdapter.Update(this.bakkerDataSet.Bestelling);
Krijg je altijd de bevestiging te zien dat het updaten goed is gelukt.

Acties:
  • 0 Henk 'm!

  • Aurora
  • Registratie: Augustus 2005
  • Laatst online: 16-09 23:20
RobIII schreef op zondag 10 juli 2011 @ 23:08:
[...]
Verder vind ik het "hou mijn handje eens vast" gehalte in dit topic véél te hoog liggen en schurkte de topicstart al behoorlijk tegen een Kan iemand even...? aan en de volgende reply des te meer ondanks dat je toch al zinnige input had. Ik zou dus vanaf dit punt ook graag wat meer eigen inzet zien (tip: lees eens wat documentatie en, als je je helemaal wil uitleven, volg eens een tutorial) want nu zit je gewoon passief te wachten tot iemand het antwoord op een zilveren schaaltje komt aanreiken.
Voordat ik dit topic opende, had ik behoorlijk veel tijd gestopt in mijn project. Alleen dit stukje kwam ik na lang priegelen niet uit. Ik vroeg om hulp en niet om een kant en klare code en ik zat ook helemaal niet te wachten op jouw commentaar. De groeten.
Azer schreef op maandag 11 juli 2011 @ 17:34:
[...]

Een reden kan zijn dat de data van een externe partij komt, die aangeleverd wordt in XML ;)
Inderdaad! XML wordt aangeleverd :)
Verwijderd schreef op woensdag 13 juli 2011 @ 10:49:
Het is al weer even geleden dat ik heb gewerkt met DataBinding in C# 8)7
Met welke gegevens update je de database?
  1. dataGridView1.DataSource = bakker2;
  2. this.bestellingTableAdapter.Update(this.bakkerDataSet.Bestelling); // moet dit niet zijn this.bestellintTableAdapter.Update(this.dataGridView1.DataSource); oid?
Alleen nu leg je volgens mij te veel verantwoordelijkheid bij de GridView (Presentatie).
Als je van je DataSet bakker2 een class variable maakt ipv lokaal kan je databinding toepassen en deze regel gebruiken;
  1. dataGridView1.DataSource = bakker2;
  2. dataGridView1.DataBind(); // nu worden veranderingen in je GridView doorgevoerd in de DataSet.
  3. this.bestellingTableAdapter.Update(this.bakker2);
En verders, tenzij er een exceptie optreed in een van deze drie regels;
  1. this.Validate();
  2. this.bestellingBindingSource.EndEdit();
  3. this.bestellingTableAdapter.Update(this.bakkerDataSet.Bestelling);
Krijg je altijd de bevestiging te zien dat het updaten goed is gelukt.
Theike, hartstikke bedankt voor je antwoord.. Ik zal hiermee verder gaan. Thanks! _/-\o_ Ook iedereen hierboven die mij probeerde te helpen, bedankt!

Topic kan hierbij op slot!

Don't forget the Cloud is just someone else's computer

Pagina: 1