[C#] Data wordt willekeurig wel of niet opgeslagen

Pagina: 1
Acties:

  • FlowDesign
  • Registratie: Januari 2002
  • Nu online
Ik ben in Visual Studio Pro 2005 een applicatie in C# aan het maken.
Gewoon niet te moeilijk: database gemaakt (MSSQL die lokaal als service draait) maar nog geen relaties aangemaakt en daaruit een dataset getrokken. The usual stuff dus.
Ik heb een Form en daar laad ik door te klikken in het menu, afhankelijk van waar je op klikt natuurlijk, de juiste UserControl in.
Nu heb ik een UserControl waarmee ik een nieuwe Cursist aan kan maken, het gaat voornamelijk om NAW gegevens. Ik gebruik op deze UserControl gewoon de standaard tableAdapter, bindingSource en bindingNavigator.
En ik heb een UserControl gemaakt met een zoekveld en een zoekbutton die een select query aanroept en dan de resultaten in een listbox laat zien. Tot zover geen probleem.

Als ik ga testen (en dat kan zowel in Debug mode zijn als met de exe die in de map bin\release staat) om een nieuwe Cursist aan te maken, dan klik ik dus eerst op de AddItem knop (geel plusteken) en dan vul ik ff die velden in die niet null mogen zijn en dan klik ik op de SaveItem knop.
Vervolgens ga ik naar m'n andere UserControl en zoek ik daar op de achternaam.

En nu komt het vreemde:
Soms dan vindt ie de Cursist wel die ik dan net heb ingevoerd en soms niet. Het is volledig willekeurig. Ook komt het voor dat ik een Cursist heb toegevoegd en opgeslagen en dat ik deze niet in m'n zoekresultaten zie, maar dat wanneer ik dan nóg een Cursist heb toegevoegd en opgeslagen (zonder het programma tussendoor af te sluiten) dat ik ze dan ineens beiden wél in m'n zoekresulaten krijg.

Kan iemand mij uitleggen waar waarschijnlijk het probleem zit of desnoods een duw in de juiste richting geven want ik zie de fout niet.

Voorbeeld van Opslaan:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
        private void cursistBindingNavigatorSaveItem_Click(object sender, EventArgs e)
        {
            if (voornaamTextBox.Text != "" && achternaamTextBox.Text != "")
            {
                this.Validate();
                this.cursistBindingSource.EndEdit();
                this.cursistTableAdapter.Update(this.rijschoolBeheerDBDataSet.Cursist);
                    
                this.bindingNavigatorAddNewItem.Enabled = true;
            }
            else
            {
                MessageBox.Show("Voornaam en Achternaam invullen a.u.b.");
            }
        }



En een functie die de SQL-query aanroept om op achternaam te zoeken:
code:
1
2
3
4
5
6
7
8
9
10
11
        private void button_zoeken_Click(object sender, EventArgs e)
        {
            try
            {
                this.cursistTableAdapter.FillByAchternaam(this.rijschoolBeheerDBDataSet.Cursist, textBox_zoeken.Text);
            }
            catch (System.Exception ex)
            {
                System.Windows.Forms.MessageBox.Show(ex.Message);
            }
        }

Mustang Mach-E SR RWD | MINI Countryman (F60) Cooper S


  • FlowDesign
  • Registratie: Januari 2002
  • Nu online
Ok, ik weet haast zeker dat ik het probleem gelokaliseerd heb, maar ik krijg het niet opgelost.

Op dat UserControl om een nieuwe Cursist aan te maken heb ik een ComboBox waarin ik data uit een andere tabel laad. Dat kan via databinding op de simpele manier of met code kan ik bijvoorbeeld dit doen:
code:
1
2
3
4
5
6
        private void loadPakket_idCombobox(object sender, EventArgs e)
        {
            this.pakket_idComboBox.DataSource = this.rijschoolBeheerDBDataSet.Tables["Pakket"];
            this.pakket_idComboBox.DisplayMember = "type";
            this.pakket_idComboBox.ValueMember = "pakket_id";
        }


Punt is dus dat ik voor DisplayMember het type wil laten zien en de Value moet de id van die rij zijn.

Nu heb ik bij de SaveItem knop de volgende code toegevoegd:
code:
1
MessageBox.Show(result + " rijen geupdate");


en wat blijkt, wanneer ik niets selecteer in de combobox dan slaat ie niks op (result = 0)
wanneer ik iets uit de lijst kies dan is het result ook 0
en wanneer ik gewoon een getal in de combobox type dan is het result 1 (goed dus).

en de waarde van die kolom mag in de database nota bene null zijn!

Wie weet waar de fout zit? Ikke nie snap.

Mustang Mach-E SR RWD | MINI Countryman (F60) Cooper S


  • H!GHGuY
  • Registratie: December 2002
  • Niet online

H!GHGuY

Try and take over the world...

C#:
1
2
3
4
if (pakket_idComboBox.SelectedIndex >= 0)
     ... = pakket_idComboBox.SelectedValue;
else
    ... = System.DbNull.Value;


offtopic:
wat een namen gebruik je, man...

cmbPakket is imo een stuk duidelijker en typt sneller

[ Voor 31% gewijzigd door H!GHGuY op 06-05-2006 09:15 ]

ASSUME makes an ASS out of U and ME


  • Mastermind
  • Registratie: Februari 2000
  • Laatst online: 17-01 10:57
Ja je moet SelectedValue gebruiken...

  • FlowDesign
  • Registratie: Januari 2002
  • Nu online
Ik heb ff zitten klooien maar het moet dus op de volgende manier ingesteld worden:

Afbeeldingslocatie: http://eggsplosion.com/etc/databindingproperties.gif

Vooral belangrijk om Text op (none) te zetten, hoe onlogisch dat ook lijkt :)

[ Voor 20% gewijzigd door FlowDesign op 06-05-2006 16:35 ]

Mustang Mach-E SR RWD | MINI Countryman (F60) Cooper S