[Windows Forms/ C#] Textfield koppelen aan database

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Sspruijt
  • Registratie: Mei 2007
  • Laatst online: 19-09 15:11
Hallo allemaal,

Ik ben sinds een paar dagen aan het stoeien met Visual Studio 2008 en met name aan het proberen om een applicatie te bouwen die samenwerkt met een database. Ik heb al een DatGridView die prima werkt en gegevens goed update naar de database. Ik heb ook een aantal instellingen die ik gewoon in textfields wil houden, omdat ik dat overzichtelijker vind werken voor de gebruiker. Wat ik nu heb werkt voor het ophalen van data. De data wordt goed weergegeven in het textfield. Echter als ik de waarde verander en op 'Opslaan' druk, wordt de veranderde waarde niet weggeschreven naar de database. Ik heb de volgende code:

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace MS_Belwijzer
{
    public partial class windowAdminParticulier : Form
    {
        TarievenDS.particulier_kpn_overigDataTable data;
        TarievenDSTableAdapters.particulier_kpn_overigTableAdapter particulier_kpn_overigTA;

        public windowAdminParticulier()
        {
            InitializeComponent();
        }

        private void windowAdminParticulier_Load(object sender, EventArgs e)
        {
            // This loads data into the 'tarievenDS.particulier_kpn_bundels' table.
            this.particulier_kpn_bundelsTableAdapter.Fill(this.tarievenDS.particulier_kpn_bundels);

            // Fill the 'overige' settings
            particulier_kpn_overigTA = new TarievenDSTableAdapters.particulier_kpn_overigTableAdapter();
            data = particulier_kpn_overigTA.GetData();
            particulier_kpn_overigTA.Fill(data);
            textAdminPartKpnV1.Text = data.Rows[0].ItemArray[2].ToString();
        }

        private void buttonAdminPartKpnBundels_Click(object sender, EventArgs e)
        {
            this.particulier_kpn_bundelsTableAdapter.Update(this.tarievenDS);
        }

        private void buttonAdminPartKpnOverig_Click(object sender, EventArgs e)
        {
            data.Rows[0].ItemArray[2] = 40;
            particulier_kpn_overigTA.Update(data);
        }       
    }
}


Ik heb geen flauw idee waarom dit niet zou werken. Ik heb verschillende tutorials bekeken, maar kan er niet achter komen waarom het niet werk. Zover ik het begrijp heb ik een DataSet van de database en een DataTable die een specifieke tabel voorstelt. In het page_load gedeelte maak ik de DataTable aan voor de tabel waar ik mee wil werken en vul ik de tabel met de desbetreffende tableAdapter. De waarde wordt nu goed in het tekstveld geladen. Bij het drukken op de knop pas ik de DataTable aan door de juiste waarde te veranderen en de DataTable geeft ik aan de Update() functie van de tableAdapter mee. De tableAdapter moet nu toch de aangepaste DataTable wegschrijven naar de database?

Alvast bedankt.

Acties:
  • 0 Henk 'm!

  • urk_forever
  • Registratie: Juni 2001
  • Laatst online: 16:10
Je zou eens kunnen kijken naar two way databinding. Dan hoef je niet met de hand de waardes over te sluizen en doet het framework dat voor jouw.

Hail to the king baby!


Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 19:18
Je DataAdapter zal geen InsertCommand , UpdateCommand & DeleteCommand hebben.
urk_forever schreef op donderdag 21 mei 2009 @ 22:01:
Je zou eens kunnen kijken naar two way databinding. Dan hoef je niet met de hand de waardes over te sluizen en doet het framework dat voor jouw.
Daar gaat het helemaal niet om. De DataTable implementeert zowiezo al 2-way databinding. De wijzigingen die hij doet in zn' form, zullen wel gereflecteerd worden in de achterliggende datatable. De wijzigingen worden echter niet opgeslagen in de database.
De DataAdapter die hij heeft, heeft wel een select-command (ophalen van data), maar er zullen geen UpdateCommands / DeleteCommand / InsertCommand aan toegekend zijn. De DataAdapter gebruikt deze nl. als er respectievelijk updates, deletes of inserts moeten gebeuren.

[ Voor 85% gewijzigd door whoami op 22-05-2009 09:01 ]

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • Sspruijt
  • Registratie: Mei 2007
  • Laatst online: 19-09 15:11
whoami schreef op vrijdag 22 mei 2009 @ 08:59:
Je DataAdapter zal geen InsertCommand , UpdateCommand & DeleteCommand hebben.


[...]

Daar gaat het helemaal niet om. De DataTable implementeert zowiezo al 2-way databinding. De wijzigingen die hij doet in zn' form, zullen wel gereflecteerd worden in de achterliggende datatable. De wijzigingen worden echter niet opgeslagen in de database.
De DataAdapter die hij heeft, heeft wel een select-command (ophalen van data), maar er zullen geen UpdateCommands / DeleteCommand / InsertCommand aan toegekend zijn. De DataAdapter gebruikt deze nl. als er respectievelijk updates, deletes of inserts moeten gebeuren.
Hier heb ik inderdaad ook aan gedacht en dit bleek ook het probleem te zijn. Wat ik raar vind is dat als ik de tableAdapter aanmaak en hem configure heb ik toch echt aangevinkt dat hij ook Update, Insert en Delete commands aan moet maken. Bij de koppeling met de DataGridView heb ik dit precies hetzelfde gedaan en werkte het prima. Wat ik nu heb gedaan is een eigen query toegevoegd aan de tableAdapter met 2 parameters. Dit werkt nu prima.

Bedankt voor de antwoorden.