Autor Beitrag
KamaSeki
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Mo 01.09.08 18:33 
Hallo erstmal :)

Ich hoffe Ihr könnt mir bei folgendem Problem auf die Sprünge helfen:

Ich habe 2 Generic.Dictionary´s.

ausblenden C#-Quelltext
1:
2:
    private static System.Collections.Generic.Dictionary<System.Guid, PackageContent> packages =
        new System.Collections.Generic.Dictionary<System.Guid, PackageContent>();


und

ausblenden C#-Quelltext
1:
2:
    private static System.Collections.Generic.Dictionary<System.Guid, PackageMain> packages =
       new System.Collections.Generic.Dictionary<System.Guid, PackageMain>();


Eingaben von der 1ten Dictionary, werden in die 2te Dictionary hinzugefügt. Dazu führt die ObjektDataSource - Klasse einen Insert aus.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
    [DataObjectMethod(DataObjectMethodType.Insert, true)]
    public static void InsertPackageContentData(PackageContent packageContent)
    {
        packages.Add(packageContent.PaketID, packageContent);
    }


Die PaketID wird mit  System.GUID bestimmt. Dh, dass die Dictionary keine 2 gleichen Schlüsselwerte einfügen kann.

Mit einem Klick auf ein Button, wird diese Dictionary in eine weitere Gridview eingefügt, so dass der Anwender eine kleine Zusammenfassung hat.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
    protected void btn_savePackage_Click(object sender, EventArgs e)
    {

        PackageMainData.InsertPackageMainData(new PackageMain("Paket", PackageContentData.GetPackagesByObject()));
        ODS_PackageMainData.Select();
        mainTable.DataBind();
    }


Die Funktion PackageContentData.GetPackagesByObject() sieht so aus:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
    [DataObjectMethod(DataObjectMethodType.Select, true)]
    public static System.Collections.Generic.ICollection<PackageContent> GetPackagesByObject()
    {
        return packages.Values;
    }


Beim Debuggen jedoch ist mir aufgefallen, dass bei jedem .add, die alten Werte in der Dictionary meiner 2ten Gridview überschrieben werden. Ich bin noch ein Anfänger und hab keine Ahnung, woran es liegt...

Hoffe, dass Ich die Problematik vermitteln konnte :)

Danke im Vorraus für jede Hilfestellung
lothi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 114
Erhaltene Danke: 3



BeitragVerfasst: Di 02.09.08 08:35 
Hallo KamaSeki

Leider habe ich nicht verstanden was genau das Problem ist. Was mir aber aufgefallen ist das du 2mal den gleichen Variablenname benutzt:

ausblenden C#-Quelltext
1:
2:
3:
4:
private static System.Collections.Generic.Dictionary<System.Guid, PackageContent> packages = new System.Collections.Generic.Dictionary<System.Guid, PackageContent>(); 

 private static System.Collections.Generic.Dictionary<System.Guid, PackageMain> packages =  
       new System.Collections.Generic.Dictionary<System.Guid, PackageMain>();



Sollte da der Compiler nicht mekern?
:?:

PS: Wie so bindest du die Namespace nicht mit der using-klausel ein? Würde das ganze übersichtlicher machen.

Gruss Lothi
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Di 02.09.08 11:34 
Ich denke, das liegt bei dir an Dictionary.Values:
Zitat:

// aus der MSDN
Die zurückgegebene Dictionary.ValueCollection ist keine statische Kopie, sondern die Dictionary.ValueCollection verweist zurück auf die Werte im ursprünglichen Dictionary. Änderungen am Dictionary werden daher auch in der Dictionary.ValueCollection wiedergegeben.

Beschäftige dich mal mit dem Unterschied von Werte- und Referenztypen...
KamaSeki Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Mi 03.09.08 12:56 
Hallo,

ich danke euch für die Anworten :)

ich werde den Tipp von Th69 mal auf den Grund gehen :) Hört sich relativ gut an!

Da beide Deklarationen in jeweils verschiedenen Klassen deklariert werden, meckert der Compiler nicht :) Ich übergebe der Dictionary einmal eine PackageMain und der 2ten Dictionary eine PackageContent.