Entwickler-Ecke
Datenbanken (inkl. ADO.NET) - List
Motze - Mi 02.03.11 23:31
Titel: List
Schönen guten abend euch.
Seit geschlagenen zwei Tagen probire ich das problem zu lösen und bin auch ein wenig frustriert langsam, aber ich will endlich eine Lösung. Das problem ist im Kopf ganz einfach zu lösen(wie die meisten probleme) aber an der umsetztung scheiter es, Jetzt komm ich mal zum eigentlichen punkt ->.
Ich habe eine List sagen wir mal mitglieder die zufälliger weise mitglieder verwaltet.
jedes mitglied hat Name Vorname usw. und eine eigene nummer(um die nummer geht es).
Jetzt lege ich eine neues mitglied an gebe name eine alter und den rest. Jetzt soll mir das programm automatisch eine nummer vergeben die noch nicht orhanden ist in der List. Also:
Name: Mustermann
Vorname: Max
Geboren: 12.12.1990
Nummer: 1 <- soll automatisch vergeben werden
Name: Musterfrau
Vorname: Lisa
Geboren: 12.12.1990
Nummer: 2 <- soll automatisch vergeben werden
Name: Schmid
Vorname: Mayer
Geboren: 12.12.1990
Nummer: 2 <- sowas darf nicht passiren
und wenn ich jetzt eine von den Lösche muss die nummer erhalten bleiben, also die nummer darf nicht neu vergeben werden.
C#-Quelltext
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: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57:
| public class Mitglieder { public string Vorname; public string Nachname; public DateTime Eintritsdatum; public DateTime Gültigkeit; public bool Für_immer; public int Nummer = 1; }
public static class Mitglieder_List { public static List<Mitglieder> Mg = new List<Mitglieder>();
public static void Mg_Hinzufügen(string vorname, string nachname, DateTime eintritsdatum, DateTime gültigkeit, bool für_immer, int nummer) { Mg.Add(new Mitglieder() { Vorname = vorname, Nachname = nachname, Eintritsdatum = eintritsdatum, Gültigkeit = gültigkeit, Für_immer = für_immer, Nummer = nummer}); }
public static string Ausgabe_Vorname(int i) { return Mg[i].Vorname; }
public static string Ausgabe_Name(int i) { return Mg[i].Nachname; }
public static string Ausgabe_Eintritsdatum(int i) { return Mg[i].Eintritsdatum.ToShortDateString(); }
public static string Ausgabe_Gültigkeit(int i) { return Mg[i].Gültigkeit.ToShortDateString(); }
public static string Ausgabe_Für_immer(int i) { if (Mg[i].Für_immer) { return "Ja"; } else { return "nein"; } }
public static int Ausgabe_Nummer(int i) { return Mg[i].Nummer; } } |
Meine Form: nur die Methode um es auf ein DataGridView auszugeben
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| DGV.Rows.Clear();
for (int i = 0; i < Mitglieder_List.Mg.Count; i++) { if (Mitglieder_List.Ausgabe_Für_immer(i).Equals("Ja")) { DGV.Rows.Add(Mitglieder_List.Ausgabe_Nummer(i), Mitglieder_List.Ausgabe_Vorname(i), Mitglieder_List.Ausgabe_Name(i), Mitglieder_List.Ausgabe_Eintritsdatum(i), "", Mitglieder_List.Ausgabe_Für_immer(i)); } else { DGV.Rows.Add(Mitglieder_List.Ausgabe_Nummer(i), Mitglieder_List.Ausgabe_Vorname(i), Mitglieder_List.Ausgabe_Name(i), Mitglieder_List.Ausgabe_Eintritsdatum(i), Mitglieder_List.Ausgabe_Gültigkeit(i), Mitglieder_List.Ausgabe_Für_immer(i)); } } |
vielen dank erstmal für das lesen und ansonsten noch ein schönen abend
PS: für verbesserungen sämtlicher art bin ich offen. im MVS sieht das besser aus.
Moderiert von
Kha: C#-Tags hinzugefügt
Kha - Mi 02.03.11 23:43
Motze hat folgendes geschrieben : |
Das problem ist im Kopf ganz einfach zu lösen(wie die meisten probleme) |
Woran hast du denn bereits gedacht und wo hakt es bei der Umsetzung?
Motze - Do 03.03.11 00:00
ich bleibe immer wieder hängen so im kopf...
erst habe ich eine for schleife probiert die von 1-1000 alle zahlen durchgeht und dann kuckt ob sie vergeben sind. was natürlich sagen wir die ersten drei sind weil die ja schon eine nummer haben. Die schleife sollte mir dan sozusagen die 4 rausgeben als return. es scheiter schon beim durchsuchen aller mitglieder.
mit while schleife probiert...
für jedes mitglied solange ein int hochzähen lassen bis eine zahl nicht verwendet wierd.
Im nachhinen geistiger unfug. Aber ich sehe vor wald den baum nichtmer höchstwarscheinlich.
Bin jetzt auf den gedanken gekommen eine zweite list zu machen mit den zahlen 1-1000 und dazu ein bool wert ob sie verwendet wird und die zahl dann zuweisen.
Es muss doch auch einfacher gehen(professioneller). Habe alles nur aus büchern und probiren. Ist bestimmt nicht professionel. Für ein Tip wie mann das ganze professioneller schreiben könnte wäre ich sehd dankbar könnte dir auch den ganz code zukommen lasse, wenn ich wüsste wie.
vielen dank schonmal
Kha - Do 03.03.11 00:39
Motze hat folgendes geschrieben : |
ich bleibe immer wieder hängen so im kopf... |
Das hört sich jetzt aber etwas anders an als "im Kopf leicht zu lösen" ;) .
Die Grundidee ist ganz einfach und benötigt überhaupt keine Suche in der bisherigen Liste: Speichere einfach die höchste bisher benutzte ID ab und zähle sie bei jedem Add hoch.
m-s - Do 03.03.11 11:40
Wenn man die einzelnen Positionen nicht löschen kann, ginge es auch über zählen der Einträge, also einfach mit Count.
Kann man Einträge löschen, geht das nicht.
Gruß Markus
Motze - Do 03.03.11 20:10
also die einträge knn mann löschen was auch ganz wichtig ist. Wie finde ich die höchste position den raus gibt es eine vorgefärtigte funktion oder muss ich eine schreiben???
das mit der höchsten position habe ich auch probiert mit einer eigenen funktion aber genau die hat bei mir nicht funktioniert(wortspiel).
habe das ganze immer über for schleifen probier und foreach aber das ganze hat nie richtig gefunzt.
Vielen dank erstmal für die antworten.
m-s - Do 03.03.11 20:40
Wenn ich das richtig sehe, müsste ja der letzte Eintrag in der Liste der mit der höchsten Zahl sein.
Wenn dem so wäre musst Du die ja nur auslesen und eins drauf rechnen.
Hast Du denn noch den Code der nicht funktioniert hat?
Gruß Markus
Trashkid2000 - Do 03.03.11 21:59
Hallo,
@
m-s das ist doch der Code, der oben steht, oder?
Warum störst Du Dich denn an der Nummer? Wenn Du willst, dass die ID des Mitglieds eindeutig ist, dann nimm einfach eine
Guid. Diese sollte eigentlich immer eindeutig sein.
Wobei ich sie statische Klasse Mitglieder_Liste eh nicht verstehe. Warum hast Du nicht irgendwo eine
List<Mitglied>? Und die List hat dann auch Funktionalitäten wie Add, Delete... Und die Abfrage einer Property über einen Index der List ist auch ziemlich unsicher. Wenn der Index nicht existiert, knallt es.
Ansonsten würde ich noch die Klasse "Mitglieder" in "Mitglied" umbenennen (lustig, Mitglied hat irgendwie was männliches :)), denn ein Objekt der Klasse spiegelt nunmal ein Mitglied wieder. Und die Variablen nicht public, sondern Properties! Und vielleicht auch einen Konstruktor.
Sorry, wenn das alles ganz schön viel verlangt ist...
LG, Marko
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!