Laden...

Dictionary<int, string> miteinander verbinden und nach datum sperren

Erstellt von _Alp_Ay vor 8 Jahren Letzter Beitrag vor 8 Jahren 1.818 Views
_
_Alp_Ay Themenstarter:in
4 Beiträge seit 2015
vor 8 Jahren
Dictionary<int, string> miteinander verbinden und nach datum sperren

Hallo zusammen,

das ist mein erster Beitrag und hoffe ich werde nicht sofort verbannt 😃

zu meiner Situation:

Also ich entwickel ein Programm, wo ich ca. 20 IDs habe und nach Datumauswahl soll diese ID für diesen Zeitraum geblockt sein. Die ID soll dann nach diesem Datum wieder freigegeben werden, damit man es erneut nutzen kann.

die IDs wollte ich in einer Dictionary auflisten und das Datum wird dann in ein Label übergeben, das kann man ja dann stringen.


 Dictionary<int, string> dir1 = new Dictionary<int, string>();
            dir1.Add(1111, _st.label6.Text.ToString()); // label6 ist das Datum
            dir1.Add(2222, _st.label6.Text.ToString());
            dir1.Add(3333, _st.label6.Text.ToString());
            dir1.Add(4444, _st.label6.Text.ToString());

Ich weiss aber nicht, wie ich das hinkriegen soll. Ich habe auch schon google durchsucht, aber irgendwie finde ich für meine Situation keine Lösung.
Oder ich kapier es nicht 😃

Hat jemand eine Idee, wie man sowas am besten anstellen kann?

Wäre über jede Hilfe dankbar.

Gruß
Alp

S
324 Beiträge seit 2007
vor 8 Jahren

Ohje...
Kein Mensch weiss was du vor hast und was da am Ende bei raus kommen soll 😕
Kannst du das evtl. etwas besser erklären?

Und für C# Code gibt es die Code-Tags 😉

_
_Alp_Ay Themenstarter:in
4 Beiträge seit 2015
vor 8 Jahren

Hi Sclot,
ja ich bin immer sehr schlecht beim erklären.

Also, es ist im Grunde genommen nichts kompliziertes.
Der Nutzer legt ein Datum fest (Bsp. 20.07.2015).

[Da sind natürlich auch paar andere Daten mit dabei]

Sobald der Nutzer auf "weiter/speichern"-Button klickt, wird eine Xml-Datei erstellt (das klappt ja auch alles soweit so gut.)

Was mir aber fehlt ist, dass ich eine liste erstellen muss, mit ca. 20 IDs.
Ich weiss nicht, wie ich das anstellen soll, wenn ich die IDs in eine arraylist oder in eine dictionary eintrage und diese so mit dem o.g. Datum verknüpfe, sodass die ID 111 bis zum Datum x nicht mehr vergeben werden kann.
D.h.: ID 111 ist noch bis Datum 20.07.2015 in Nutzung, also gehe weiter auf ID 222 usw usw usw...

Ich hoffe, dass es so etwas deutlicher ist X(

S
324 Beiträge seit 2007
vor 8 Jahren

Also... Vereinfacht gesagt hast du 2 Werte: ID und ein "gültig_bis"-Datum?
Und du möchtest jetzt eine Liste mit ID´s pflegen, welche bis zu einem Bestimmten Datum benutzt werden können/düfen.

Grob dargestellt wäre das sowas:


ID | gueltig_bis
------------------
1  | 01.07.2015
2  | 05.07.2015
3  | 10.07.2015
4  | null
5  | null
...|...

Ich denke ich würd eine List<T> mit einem Objekt nutzen wo ein int und ein Datetime drin ist und diese Liste dann mit Linq bzw Lambda abfragen... alle Objekte raus suchen für die das datum abgelaufen ist und diese nach ID sortieren. Das erste Objekt sollte dann die nächste abgelaufene ID beinhalten.

Trotzdem hab ich den Sinn von dem ganzen Konstrukt noch nicht wirklich verstanden 😉
Also.. welchen Sinn hat das ID´s mehrfach zu vergeben? der Name "ID" impliziert doch schon das es etwas ist um irgendetwas eindeutig identifizieren zu können.

_
_Alp_Ay Themenstarter:in
4 Beiträge seit 2015
vor 8 Jahren

Danke für dein Tipp..

ich habe es einfach nur ID genannt. Es handelt sich zwar um INT aber nicht ID... Das war nur zur Verdeutlichung 😃

Ich versuche es mal und ansonsten nerv ich das Forum mit meinen Problemen 😃

_
_Alp_Ay Themenstarter:in
4 Beiträge seit 2015
vor 8 Jahren

Servus,
ich habe mal bisschen daran gearbeitet und komme leider nicht mehr weiter.

Ich erläutere das mal bisschen detaillierter.

Das Programm soll eigentlich nicht viel machen.

Ich als User möchte gerne eine Aktion starten und diese Aktion soll so aussehen.

Kaufe 2 Flaschen Cola und erhalte 50 Cent Rabatt.
Startdatum 20.07.15 -- Enddatum 25.07.15, alles wird so angegeben, was auch ziemlich gut klappt.
Und diese Angaben werden in eine XML Datei geschrieben (XML_AKTION).

In der XML_AKTION stehen die Angaben drin.
Und für diese AKTION muss eine EAN zugestimmt werden.
Diese EAN soll bis Enddatum nicht mehr verwendbar sein.
Nach Enddatum kann ich wieder eine AKTION Starten und diese EAN kann dann wieder verwendet werden.
Wie eben geschrieben habe ich eine zusätzliche xml mit eans und aus dieser Liste soll er sich das ziehen und bis Enddatum blocken...

Nur ich komme nun nicht mehr weiter...
Das ist mein teil CODE

 form 1
List<string> used_ean_list =  new List<string>();

private int myID()
        {
           int oldXML = 0;
            try
            { 
                XmlDocument xml = new XmlDocument();
                xml.XmlResolver = null;
                xml.Load(@"C:\XML_AKTION.xml");
                XmlNodeList xlist = xml.SelectNodes("/CRS/CR");
                foreach(XmlNode xn in xlist)
                {
                    string currentID = xn["id"].InnerText;
                    oldXML = Convert.ToInt32(currentID); // bis hierhin funktioniert alles soweit.

                    used_ean_list.Add(xn["cr"].InnerText);
                }
            
            }
            catch (ArgumentNullException e)
            {
                MessageBox.Show("PROBLEM: " + e);
            }
            catch (Exception e)
            {
                MessageBox.Show("PROBLEM Exception: " + e);
            }

            Console.WriteLine("RETURN VALUE:" + oldXML);
            return oldXML;
        }

        private string ean()
        {
            string ean = "";
            string ean_in_use = "";
            int v = 1;
            try
            {
                XmlDocument xml = new XmlDocument();

                xml.XmlResolver = null;

                xml.Load(@"C:\ean_pool.xml");

                foreach (String xn in _st.used_ean_list)
                {
                    ean_in_use = xn;

                    XmlNodeList ean_node_list = xml.SelectNodes("/eanpool");
                    foreach (XmlNode ean_Node in ean_node_list)
                    {
                        ean = ean_Node["ean" + v].InnerText;
                        if (!string.Equals(ean, ean_in_use))
                        {
                            return ean;
                        }
                        else
                        {
                            v++;
                        }
                    }

                }
            }
            catch (ArgumentNullException e)
            {
                MessageBox.Show("PROBLEM: " + e);
            }
            catch (Exception e)
            {
                MessageBox.Show("PROBLEM Exception: " + e);
            }

            Console.WriteLine("RETURN VALUE:" + ean);
            return ean;
        }

......

        private void button2_Click(object sender, EventArgs e)
        {
		...
			 writer.WriteElementString("cr", ean()); // hier soll die EAN aus dem EAN_POOL
		...
	}


und hier noch die xml (ean_pool.xml


<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE xxx SYSTEM "xxx.dtd">
<eanpool>
    <ean1>1111</ean1>
    <ean2>2222</ean2>
    <ean3>3333</ean3>
    <ean4>4444</ean4>
    <ean5>5555</ean5>
    <ean6>6666</ean6>
    <ean7>7777</ean7>
</eanpool>


ich weiss leider nicht, wie ich das nun mit Enddatum verknüpfe...

Hoffe, Ihr könnt mir weiterhelfen. Ich komm da nicht mehr weiter. ?(

16.833 Beiträge seit 2008
vor 8 Jahren

Ist das nicht eine potenzielle n:n Beziehung und muss auch so gehandhabt werden?
Wenn nicht reichen zwei Attribute für die Zeitspanne, wenn ich Deine Beschreibung richtig verstehe.

D
985 Beiträge seit 2014
vor 8 Jahren

Da gibt es also eine Handvoll Nummern - EANs wären 8 oder 13-stellig und heissen seit 2009 GTIN - die an einer zeitlich begrenzten Aktion einmal teilnehmen können.

Somit prüft man die gültigen Aktionen (Zeitraum) und ob die Nummer teilnehmen darf und ob die schon teilgenommen hat.

Wenn die Nummer teilgenommen hat, dann trägt man die einfach für die Aktion in eine Liste der teilgenommenen Nummern ein. Fertig.