Autor Beitrag
Talemantros
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 444
Erhaltene Danke: 2

Win7 Proff 64bit
C# (VS2013)
BeitragVerfasst: So 14.12.14 14:51 
Hallo,
ich hoffe der Titel ist einigermaßen gewählt.
Würde euch gern mal eine Problemstellung nennen und fragen wie ihr diese lösen würdet.
Meinen Ansatz nenne ich auch, da ich aber noch viel zu lernen habe geht es ja vielleicht auch einfacher.

Ich habe eine Liste aller Maschinen, die in einem DataGidview über eine BindingSource angezeigt wird.
Der Benutzer kann einige davon auswählen (diese dürfen nicht doppelt sein) und die lasse ich in einem anderen DatagridView anzeigen.
Das funktioniert soweit auch.

Wenn nun ein gespeicherter Prozess aufgerufen wird, habe ich das Fenster mit allen Maschinen und das aus der Datenbank geladene mit den bereits früher ausgewählen.
Da die Maschinen aber nicht doppelt sein dürfen sollen in dem DatagridView, wo sonst alle angezeigt werden, nur die angezeigt werden die noch nicht ausgewählt wurden (hoffe verständlich)

Ich würde es nun wie folgt machen, auch wenn ich teilweise noch nicht weiß, wie ich den Code bauen muss :-)

1.) Laden aller Maschinen ins erste DataGridview
2.) Anhand der zu bearbeitenden Auswahl laden der Maschinen für den Prozessschritt in das 2te DataGridView
3.) Eine Schleife über das 2te DataGrid und dann sinngemäß:

Guck dir den Eintrag an und lösche ihn aus dem ersten DataGridView

Auf die Weise hätte ich dann keinen doppelt?!

Geht das leichter?Anders?

Danke

Gruß
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: So 14.12.14 15:11 
Meinst du damit folgendes:

Du hast eine Liste mit Elementen. Der User kann sich aus dieser Liste einzelne Elemente raus suchen und legt sie dadurch in eine zweite Liste.
Nun möchtest du die ausgewählten Elemente aus der ersten Liste entfernen, damit in beiden Listen zusammen jedes Element nur einmal vor kommt?
Talemantros Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 444
Erhaltene Danke: 2

Win7 Proff 64bit
C# (VS2013)
BeitragVerfasst: So 14.12.14 15:55 
Jaein :-)
Den Schritt habe ich schon erledigt und die ausgewählten Elemente der 2ten Liste werden gespeichert unter einem sog. "Prozessschritt"

Wenn dieser Prozessschritt nun bearbeitet werden soll, werden erst die Daten angezeigt die damals dazu angelegt wurden.
Zum BEarbeiten soll er in Liste 1 jetzt nicht mehr alle möglichen im System hinterlegten Maschinen haben, sondern nur die die jetzt übrig sind anhand der Auswahl

Danke

Gruß
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4701
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: So 14.12.14 16:29 
Das die Anzeige in einem DataGridView angezeigt wird ist, wie immer sollen UI Controls niemals nicht eine Rolle spielen, irrelevant für die Lösung. In was für einer Datenstruktur stecken deine Maschinen?
Wen sie einer Linq-fähigen Struktur stecken dann hilft der Except Operator.
Talemantros Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 444
Erhaltene Danke: 2

Win7 Proff 64bit
C# (VS2013)
BeitragVerfasst: So 14.12.14 17:10 
Mit Linq habe ich noch gar keine Berührungspunkte gehabt.

Momentan ist es wie folgt gebaut:

Klasse
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
    public class AllMachinesProcessStep
    {
        public long Id { get; set; }
        public string Label { get; set; }
    }


Anhand der Klasse lasse ich eine List<> füllen

ausblenden 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:
        public static List<AllMachinesProcessStep> GetAllMachinesForProcessStep()
        {
            strSql = "Select maschgrundid, bezeichnung from maschgrund order by bezeichnung asc";
            List<AllMachinesProcessStep> myMachine = new List<AllMachinesProcessStep>();

            using (MySqlConnection conn = new MySqlConnection(connStr))
            {
                using (MySqlCommand cmd = new MySqlCommand (strSql, conn))
                {
                    conn.Open();
                    MySqlDataReader dr = cmd.ExecuteReader();

                    while (dr.Read())
                    {
                        myMachine.Add(new AllMachinesProcessStep() { Id= dr.GetInt64("maschgrundid"), Label = dr.GetString("bezeichnung") });
                    }
                    conn.Close();

                }
            }

            return myMachine;
        }


Und die Rückgabe hatte ich an die BindingSource gepackt.
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4701
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: So 14.12.14 20:38 
Die Menge die nicht mehr auswählbar sein soll sind das auch AllMachinesProcessStep Objekte? Und wenn du sagt sie sollen nicht doppelt sein worauf bezieht sich das? Auf die Id in den Objekten?
Talemantros Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 444
Erhaltene Danke: 2

Win7 Proff 64bit
C# (VS2013)
BeitragVerfasst: Mo 15.12.14 14:51 
Hallo,
alle Maschinen sind momentan ein Objekt von AllMachines und die ausgewählten für einen Prozessschritt Objekte von AllMachinesProcessStep.
Dies könnte ich aber umbauen, wenn nötig.

Mit dem doppelt meine ich wie folgt.
Beim Anlegen eines Prozessschritt werden alle möglichen Maschinen angezeigt und der Benutzer kann sich zu dem Prozesschritt Maschinen aussuchen.
die ausgesuchten werden von der BindingSource "ALLE" in die BindingSoruce "Ausgewählte" geschoben und in einem andern DFataGrid angezeigt.

Wenn nun dieser Prozessschritt bearbeitet werden soll, kann ich ja in der BindingSource "Alle" nicht alle vorhalten, weil ja welche davon schon lt. Datenbank in der BindingSource "Ausgewählte" stecken.

Daher darf in der UI quasi jede Maschine nur einmal vorkommen. Entweder in der Alle oder ausgewählte.

Ich wüßte keider nicht wie ich es besser erklären soll. (vielleicht hilft das Bild auch wenn es noch im Entwurf ist)

Daher die "Idee" ich lade die Liste "Ausgewählte", dann lade ich die Liste ALLE und versuche dann mit einer Schleife aus der Liste "ALLE" die raus zu filtern, die schon in "Ausgewählte" stecken ?! !?!


Gruß

EDIT: Ausversehen auf "Fall erledigt" geklickt! Sorry
Einloggen, um Attachments anzusehen!