Hulp gezocht met programma voor C# console

Status
Niet open voor verdere reacties.

klaasm4n

Gebruiker
Lid geworden
1 jan 2011
Berichten
64
Op de volgende link kunnen jullie het downloaden:

http://www.megaupload.com/?d=FGUGJ421

Het zit zo, voor een opdracht had ik een originele programma ontvangen met daarin de MedewerkersSchermen. Deze werkte gewoon perfect. Ondertussen moest ik PersoonsSchermen bij toevoegen en dat heb ik ook gedaan en helemaal uit gewerkt. Alleen is het probleem nu:

Als ik bij MedewerkerSchermen ShowAllMedewerkers klik na het runnen, dan laat het niet alle default velden zien. Sterker nog, het laat niets meer zien.. ik heb nog geprobeerd om de code van het originele te kopieeren en te plakken, maar zonder succes.

En bij PersoonSchermen werkt alles, hier laat het wel alle velden zien bij ShowAllPersonen, maar alleen werkt de filter van ShowAllPersonen (op gezinsleden) en de comboBox (van leeftijd) niet..

Ik hoop dat iemand mij hiermee kan helpen wat ik verkeerd heb gedaan en hoe het moet..!
 
@xxmart, sorry, ik weet niet welke stukje ik moet kopieeren en plakken, het is namelijk erg veel code.
 
Als ik bij MedewerkerSchermen ShowAllMedewerkers klik na het runnen, dan laat het niet alle default velden zien. Sterker nog, het laat niets meer zien.. ik heb nog geprobeerd om de code van het originele te kopieeren en te plakken, maar zonder succes.

Je koppelt nergens de datasource aan datagridView1. Dit moet wel gebeuren (zie rode regel ).
Code:
public ShowAllMedewerkersForm()
        {
            InitializeComponent();
            bindingSourceMedewerkers.DataSource = Medewerkers.MedewerkersLijst;
           [COLOR="red"] dataGridView1.DataSource = bindingSourceMedewerkers;[/COLOR]            comboBoxAchterNaam.Items.Add("");
            foreach (Medewerker medewerker in Medewerkers.MedewerkersLijst)
            {
                if (!comboBoxAchterNaam.Items.Contains(medewerker.AchterNaam))
                {
                    comboBoxAchterNaam.Items.Add(medewerker.AchterNaam);
                }
            }
        }



En bij PersoonSchermen werkt alles, hier laat het wel alle velden zien bij ShowAllPersonen, maar alleen werkt de filter van ShowAllPersonen (op gezinsleden) en de comboBox (van leeftijd) niet..

Als je naar de ZoekPersonenMetLeeftijd methode in de class personen kijkt dan zie je waarschijnlijk wel waar het fout gaat:

Code:
public static List<Persoon> ZoekPersonenMetLeeftijd(string leeftijd)
        {
            List<Persoon> personenlijst = new List<Persoon>();

            foreach (Persoon persoon in PersonenLijst)
            {
                if (persoon.Leeftijd == 0)
                {
                    personenlijst.Add(persoon);
                }
            }

            return personenlijst;
        }

Je zoekt daar altijd naar personen met leeftijd ==0. Dus die 0 moet je vervangen voor de variabele: leeftijd.
 
@Don at work, mag ik u hartelijk bedanken?! Het eerste is gelukt, maar het tweede niet. Ik krijg namelijk de volgende error: Operator '==' cannot be applied to operands of type 'int' and 'string'. Ik denk dat het te maken heeft met leeftijd (int) is gelijk aan (string variabele). Ik weet nu alleen niet hoe ik dit moet converteren en of ik dat wel moet doen.. Kunt u me misschien hiermee helpen?

En mijn vraag over Gezinsleden (dat is het filter buttontje)!

Alvast nogmaals hartelijk bedankt!
 
@Don at Work, heb even gekeken en heb het volgende kunnen doen om het te laten werken:

Code:
        public static List<Persoon> ZoekPersonenMetLeeftijd(string leeftijd)
        {
            List<Persoon> personenlijst = new List<Persoon>();

            foreach (Persoon persoon in PersonenLijst)
            {
                if (persoon.Leeftijd == int.Parse(leeftijd))
                {
                    personenlijst.Add(persoon);
                }
            }

            return personenlijst;
        }

Dat werkt wel, maar nu is de vraag.. is dit een gebruikelijk en standaard toepassing? Of is dit toch gewoon een sjoemel code??

En ik zou nog wel graag hulp willen met de gezinsleden filter button (bij ShowAllPersonen)
 
Laatst bewerkt:
Gezinsleden is nu ook gelukt, heel vreemd, maar weet niet precies hoe het komt.. ik denk alleen omdat ik de hoofdletter p heb gewijzigd in een kleine letter p in de volgende code:

Code:
        public static List<Persoon> ZoekGezinsledenKleinerGelijkaan(double gezinsleden)
        {
            List<Persoon> personenLijst = new List<Persoon>();

            foreach (Persoon persoon in PersonenLijst)
            {
                if (persoon.Gezinsleden <= gezinsleden)
                {
                    [B]personenLijst.Add(persoon);[/B]                }
            }

            return personenLijst;
        }

Mooi, alles werkt nu perfect! Dank je voor je hulp Don at work. Ik wacht alleen nog af op je reactie of het dus gewoon een normale toepassing is om in deze situatie een tryparse kunt gebruiken of dat het anders moet/kan.

Fijne avond iedereen!
 
Al wel eens gewerkt met Linq en Lambda expressies?

Je moet je sowieso afvragen of je die string leeftijd niet 'eerder' wilt converteren naar een int. Maar dat is afhankelijk van de verdere opzet van je applicatie.

[CPP]public static IEnumerable<Persoon> ZoekPersonenMetLeeftijd(string leeftijd)
{
int age;
if (!int.TryParse(leeftijd, out age))
{
/*leeftijd is geen geldig nummer.. >> foutafhandeling*/

//throw new ArgumentException("foutmelding hier");
//_leeftijd = 0 of default;
//return PersonenLijst;
//return null;
}

return PersonenLijst.Where(p => p.Leeftijd == age);
}[/CPP]
 
Mooi, alles werkt nu perfect! Dank je voor je hulp Don at work. Ik wacht alleen nog af op je reactie of het dus gewoon een normale toepassing is om in deze situatie een tryparse kunt gebruiken of dat het anders moet/kan.

Converteren van data types (casting) is in C# heel gebruikelijk en eigenlijk onontbeerlijk.
Dus dat kan je prima doen. Ik ben het met @xxmart eens dat de plaats waar je de string leeftijd converteert waarschijnlijk op een eerder punt kan gebeuren. (dus voordat/tijdens aanroepen methode i.pv. in de methode zelf)
Code:
 private void comboBoxLeeftijd_SelectedIndexChanged(object sender, EventArgs e)
        {
           
            int leefTijd;
            if (int.TryParse(comboBoxLeeftijd.SelectedItem.ToString(), out leefTijd))
            {
                persoonBindingSource.DataSource =
                   Personen.ZoekPersonenMetLeeftijd(leefTijd);
                
            }
            else
            {
                persoonBindingSource.DataSource = Personen.PersonenLijst;
            }
        }
..
..
Code:
public static IEnumerable<Persoon> ZoekPersonenMetLeeftijd([COLOR="red"]int[/COLOR] leeftijd)..
 
Al wel eens gewerkt met Linq en Lambda expressies?

Je moet je sowieso afvragen of je die string leeftijd niet 'eerder' wilt converteren naar een int. Maar dat is afhankelijk van de verdere opzet van je applicatie.

[CPP]public static IEnumerable<Persoon> ZoekPersonenMetLeeftijd(string leeftijd)
{
int age;
if (!int.TryParse(leeftijd, out age))
{
/*leeftijd is geen geldig nummer.. >> foutafhandeling*/

//throw new ArgumentException("foutmelding hier");
//_leeftijd = 0 of default;
//return PersonenLijst;
//return null;
}

return PersonenLijst.Where(p => p.Leeftijd == age);
}[/CPP]
Nee, heb ik niet eerder mee gewerkt.

Converteren van data types (casting) is in C# heel gebruikelijk en eigenlijk onontbeerlijk.
Dus dat kan je prima doen. Ik ben het met @xxmart eens dat de plaats waar je de string leeftijd converteert waarschijnlijk op een eerder punt kan gebeuren. (dus voordat/tijdens aanroepen methode i.pv. in de methode zelf)
Code:
 private void comboBoxLeeftijd_SelectedIndexChanged(object sender, EventArgs e)
        {
           
            int leefTijd;
            if (int.TryParse(comboBoxLeeftijd.SelectedItem.ToString(), out leefTijd))
            {
                persoonBindingSource.DataSource =
                   Personen.ZoekPersonenMetLeeftijd(leefTijd);
                
            }
            else
            {
                persoonBindingSource.DataSource = Personen.PersonenLijst;
            }
        }
..
..
Code:
public static IEnumerable<Persoon> ZoekPersonenMetLeeftijd([COLOR="red"]int[/COLOR] leeftijd)..

Oke, op die manier. Duidelijk ja! Ik laat het voor nu even zo en zal later dieper ingaan.

Heren, hartstikke bedankt! Wie weet plaats ik later nog wat als ik er niet uitkom
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan