Dataset en Datagridview (Schoolproject)

Status
Niet open voor verdere reacties.

yilmaz19

Gebruiker
Lid geworden
7 dec 2012
Berichten
6
Beste Forumleden,

Als opdracht voor het vak programmeren, moet ik in c# een database applicatie maken. Het project wat ik bedacht heb is het maken van een soort van Magister(leerlingvolgsysteem). (MOET MET DATASET)

Ik heb tot nu toe dat ik via textboxen dingen kan zetten in een *.XML file, zoals naam, achternaam, woonplaats etc.

Het enige probleem wat ik nu heb is dat ik ook per leerling een cijfer wil kunnen invoeren in de applicatie. Dit gaat door middel van een DataGridView, het enige wat me tot nu toe gelukt is is dat ik in het datagridview wel de leerlingen kan tonen. In de Dataset heb ik een apparte tabel gemaakt voor de cijfers en heb ik kolommen met een aantal schoolvakken zoals : Nederlands, Engels, Wiskunde etc.

Ik zou graag willen weten hoe ik de "Cijfers" tabel kan verbinden met de ID van het "Leerlingen", zodat als ik op de knop "next" druk, dat de resultaten van de volgende leerlingen in het datagridview zichtbaar worden.

Ik upload hierbij eventjes mijn project-map.

Hier de code van form1:

Code:
//// ////////////////////////////////////////////////////////////////////////////////           
                    private void MyInitialize()// eigen methode
                    {
                        if (File.Exists(filename))
                        {

                            personenSet.ReadXml(filename);
                        }

                        else
                        {
                            openFD.FileName = "XML File|*.xml";
                            openFD.Title = "Open de database...";
                            openFD.ShowDialog();


                            personenSet.ReadXml(openFD.FileName);
                        }
       

                        Verzameling.DataSource = personenSet.Tables["Personen"];
                        cijfersGridView.DataSource = personenSet;
                        cijfersGridView.DataMember = "Cijfers";
                        

                        //linkt de textboxen naar de datatables

                        this.txtNaam.DataBindings.Add(new Binding("Text", Verzameling, "Naam"));
                        this.txtAchternaam.DataBindings.Add(new Binding("Text", Verzameling, "Achternaam"));
                        this.txtStraat.DataBindings.Add(new Binding("Text", Verzameling, "Straat"));
                        this.txtHuisnummer.DataBindings.Add(new Binding("Text", Verzameling, "Huisnummer"));
                        this.txtPlaats.DataBindings.Add(new Binding("Text", Verzameling, "Plaats"));
                        this.txtPostcode.DataBindings.Add(new Binding("Text", Verzameling, "Postcode"));
                        this.comboBox1.DataBindings.Add(new Binding("Text", Verzameling, "Geslacht"));
                        this.dateGeboorte.DataBindings.Add(new Binding("Text", Verzameling, "Geboortedatum"));
                        this.txtHuistel.DataBindings.Add(new Binding("Text", Verzameling, "Huistelefoon"));
                        this.txtMobiel.DataBindings.Add(new Binding("Text", Verzameling, "Mobiel"));
                        this.lijstNav.BindingSource = Verzameling;





                    }

///// /////////////////////////////////////////////////////////////////////////////////////////////////////





        //als form word afgesloten word het opgeslagen
        void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {


            if (savingnodig)
            {
                Verzameling.EndEdit();
                personenSet.WriteXml(filename);
            }


        }


        //telefooncheck alleen nummers
        private void txtHuistel_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (char.IsDigit(e.KeyChar))
            {
                return;
            }
            if (e.KeyChar == (char)Keys.Back)
            {
                return;
            }
            if (e.KeyChar == '.' && !txtHuistel.Text.Contains('.'))
            {
                return;
            }
            e.Handled = true;
        }





        

        












       


///Menustrip//////////////////////////////////////////////////////////////////




        //slaat bestanden op
        private void btnSave_Click(object sender, EventArgs e)
        {
            personenSet.WriteXml(filename);//schrijft naar "filename"

        }


        //opent een geselecteerde database
        private void openToolStripMenuItem_Click(object sender, EventArgs e)
        {
            int aantalLeerlingen = 0;


            openFD.InitialDirectory = "C:";//hoofdmap
            openFD.Title = "Kies het XML-Bestand";//titel van het filedialog scherm
            openFD.FileName = "";//standaard bestandsnaam
            openFD.Filter = "Text Files|*.xml";//bestandstypes filter

            if (openFD.ShowDialog() == System.Windows.Forms.DialogResult.OK)//als op ok word gedrukt
            {
                personenSet.ReadXml(openFD.FileName);//open gekozen bestand en lees in

                aantalLeerlingen = personenSet.Tables["Personen"].Rows.Count;

                lblLeerling.Text = aantalLeerlingen.ToString();
            }

        }


        private void saveAsToolStripMenuItem_Click(object sender, EventArgs e)//opslaan als
        {

            saveFileDialog1.Filter = "XML-Bestand|*.xml";//bestandstypes filter
            saveFileDialog1.Title = "Save the database";//titel van het filedialog scherm

            if (saveFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                personenSet.WriteXml(saveFileDialog1.FileName);

            }


        }



        private void saveToolStripMenuItem_Click(object sender, EventArgs e)//opslaan
        {
            personenSet.WriteXml(filename);//schrijf naar bestand
            lblStatusStrip.Text = "Saved!";
        }


        private void openInNotepadToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Process.Start("Notepad.exe", filename);//open bestand met notepad
        }




        private void openFD_FileOk(object sender, CancelEventArgs e)//bestand openen (database)
        {
            openFD.FileName = "XML File|*.xml";
            openFD.Title = "Open de database...";
            openFD.ShowDialog();

            filename = openFD.FileName;

            personenSet.ReadXml(openFD.FileName);



        }

        private void menuStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {

        }



        private void exitToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Application.Exit();

            if (filename == "")
            {

                personenSet.WriteXml(openFD.FileName);

                if (openFD.FileName == "")
                {
                    saveFileDialog1.Filter = "XML File|*.xml";
                    saveFileDialog1.Title = "Save the database";
                    saveFileDialog1.ShowDialog();

                    personenSet.WriteXml(saveFileDialog1.FileName);

                }


            }

            else
            {
                personenSet.WriteXml(filename);
            }

        }


         private void voegKlasToolStripMenuItem_Click(object sender, EventArgs e)
        {

            DialogResult dialogres = MessageBox.Show("Nieuwe Klas Aanmaken", "Weet u zeker dat u een nieuw klas wilt aanmaken, zonder op te slaan?", MessageBoxButtons.YesNo);

            if (dialogres == DialogResult.Yes)//als er op ja word geklikt
            {

                personenSet.Clear();
                saveFileDialog1.Filter = "XML-Bestand|*.xml";//bestandstypes filter
                saveFileDialog1.Title = "Save the database";//titel van het filedialog scherm
                saveFileDialog1.ShowDialog();

                if (saveFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                {
                    personenSet.WriteXml(saveFileDialog1.FileName);

                }
                

                
            }

            else if (dialogres == DialogResult.No)//als er op nee word geklikt
            {

                personenSet.WriteXml(filename);
                personenSet.Clear();


            }

        }

         private void easyModusToolStripMenuItem_Click(object sender, EventArgs e)
         {
             this.Hide();


             Form2 Form2 = new Form2();
             Form2.ShowDialog();
             this.Show();
         }
/// /////////////////////////////////////////////////////////////////////////////////////
/// 



        private void toolStripLabel1_Click(object sender, EventArgs e)
        {

        }




        private void s2AToolStripMenuItem_Click(object sender, EventArgs e)
        {
            lblKlas.Text =  "4S2A";
        }




        private void s2BToolStripMenuItem_Click(object sender, EventArgs e)
        {
            lblKlas.Text = "4S2B";
        }




        private void s2CToolStripMenuItem_Click(object sender, EventArgs e)
        {
            lblKlas.Text = "4S2C";
        }




        private void s2DToolStripMenuItem_Click(object sender, EventArgs e)
        {
            lblKlas.Text = "4S2D";
        }




        private void bindingNavigatorCountItem_Click(object sender, EventArgs e)
        {

        }




        private void klassenToolStripMenuItem_Click(object sender, EventArgs e)
        {

        }




       





        private void IetsVeranderd(object sender, EventArgs e)
        {
            savingnodig = true;
        }




        private void groupBox1_Enter(object sender, EventArgs e)
        {

        }




        private void tabPage1_Click(object sender, EventArgs e)
        {

        }

        private void cijfersGridView_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {

        }

        private void lblLeerling_Click(object sender, EventArgs e)
        {

        }

        private void txtNaam_TextChanged(object sender, EventArgs e)
        {
            
            
        }

        private void txtStraat_TextChanged(object sender, EventArgs e)
        {
           
        }

        private void txtPlaats_TextChanged(object sender, EventArgs e)
        {

        }

        private void gtrToolStripMenuItem_Click(object sender, EventArgs e)
        {

        }

        private void saveFileDialog1_FileOk(object sender, CancelEventArgs e)
        {

        }

        private void lijstNav_Refre****ems(object sender, EventArgs e)
        {

        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void bindingNavigatorMoveNextItem_Click(object sender, EventArgs e)
        {

        }





        }

    }


link naar projectmap : http://www.mediafire.com/?fj9tk9jcm32jdth

Bij voorbaat dank!
 
Laatst bewerkt:
Je kunt iedere leerling een bep. nummer geven.
Vervolgens gebruik maak je verschillende tabellen voor cijfers, gegevens etc.
In iedere tabel kun je een nummerkolom maken waarmee je de gegevens aan een leerling verbindt.

Is dat een idee?

[edit] een een netter GUI voor meer punten?[/edit]
 
Ik neem aan dat je met nummerkolom een Key bedoeld "sleutel", ik heb in dit geval 2 tabellen, 1 genaamd "Personen"(voor de leerlingen) en 1 voor de cijfers genaamd "Cijfers".

Ik heb in "Personen" een kolom genaamd "ID" en dit is een sleutel, elke keer als ik een record toevoeg word deze met 1 verhoogd zodat het een uniek sleutel word per leerling (bijv. een leerlingnummer).
Deze heb ik weer verbonden aan de "ID" kolom van het tabel "Personen". Alleen verder dan dit kom ik niet.
Ik heb de datasource van de GridView gezet op het tabel "Cijfers" alleen gebeurt er nog niet zo veel.

Later kan ik nog aan de GUI werken, want ik heb nu nog ongeveer zo'n 5 weken over voor dit project.
 
Dat bedoel ik inderdaad.

Je hebt dus de volgende tabellen:

Algemene_Gegevens
Cijfers

In de eerste tabel worden ook de namen verbonden aan de sleutels.
Gewoon een kwestie van de data uitlezen? (WHERE Key='X')

Wat probeer je te doen wat niet lukt ?
(Ik kan niet een kant en klaar voorbeeld leveren aangezien dit gewoon huiswerk is...)
 
Als u het projectmapje kunt downloaden, kunt u zien wat ik probeer te doen. Ik probeer de 2 tabellen die ik aangemaakt heb, "Personen" en "Cijfers" parallel te laten lopen, dat als ik op de knop "Volgende" klik dat ze allebei een ID nummer hoger gaan, zodat deze bij mekaar horen en de behaalde "toetscijfers" in het DataGridView te laten zien
 
Bloodshed, hartelijk bedankt voor dat linkje. Dat wat er in dat linkje staat heb ik al onder de knie, maar het probleem resteert nog steeds dat als ik op het "Next" knopje druk, ik niet de cijfers krijg van de volgende leerling, maar nog steeds die van de vorige behoud in het GridView. Is er iemand die een klein voorbeeld voor mij heeft.
 
Ik denk dat je bindingsource een event heeft selectedItemChanged of positionChanged. Je zou hierop kunnen subscriben en dan aan de hand van de position/row het persoonId eruit halen.
En dan een filter op de 2e grid zetten dat alleen de rows met dat persoonId zichtbaar zijn.

Zelf zet ik de data om naar classes zodra ik ze uit de datasource haal dus gebruik ik dit eigenlijk nooit. Vind zelf een datagrid control wat non user friendly (en lelijk).


(probeer eerst de werking goed te krijgen en dan de UI mooi en gebruikers vriendelijk(!!!) maken)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan