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

Win7 Proff 64bit
C# (VS2013)
BeitragVerfasst: Sa 14.06.14 13:59 
Hallo zusammen,
ich habe in den letzten Einträgen hier ja von euch gelernt mit DataBinding und Modellklasen (Properties) umzugehen und diese an TextBoxen und Comboboxen zu binden.

So sahen dann beispielsweise die Properties aus.
ausblenden C#-Quelltext
1:
        public string StandartDrucker { get; set; }					


Das habe ich mittlerweile auch verinnerlicht, komme nun aber zu der nächsten Frage

Ich würde gerne eine Property haben, die ich an eine Listbox oder DataGridView binden kann, die also mehrere Einträge "verwalten" kann

ausblenden C#-Quelltext
1:
        public List<string> MeineListe { get; set; }					


Leider fehlt es mir nun an der Möglichkeit und dem Wissen, Daten dort einzulesen bzw. Löschen und Bearbeiten wäre super.

Kann mich da jemand unterstützen?

Danke

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


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Sa 14.06.14 16:34 
Ähm, es ist eine List<T> wie jede andere auch also fügt man da einfach was hinzu(Add) oder entfernt irgendwas(Remove)? Da ist nix besonderes weil das eine Property ist.

Falls du gerade daran scheiterst das eine Liste auch eine Klasse und damit eine Referenztyp ist dann mußt du auch an der Property erstmal eine Liste erzeugen sonst ist die wie jede Variable auf eine Klasse erstmal null.Da man automatische Properties nicht initialisieren kann (noch nicht in C# 6 wird hoffentlich alles besser) macht man das oft im Konstruktor und mach den setter privat denn üblichewrweise will man ja nicht die Liste komplett ersetzen sondern nur den Inhalt der Liste ändern wofür der getter reicht.

Also

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
public class MeineLiebeKlasse
{
    public MeineLiebeKlasse()
    {
        MeineLiebeProperty = new List<string>();
    }

    public List<string> MeineLiebeProperty { get; private set; }
}



Übrigens macht es wenig Sinn eine List<string> an ein Grid zu binden. Dann hättest du genau eine Spalte was ziemlich sinnfrei ist. Ich bezweifle sogar das überhaupt geht. Komplexes Databinding (und normales eigentlich auch) ist designed um Properties von Klassen anzuzeigen. Welche Property von string stellt den denn string dar?
Talemantros Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 444
Erhaltene Danke: 2

Win7 Proff 64bit
C# (VS2013)
BeitragVerfasst: Sa 14.06.14 19:37 
Hi,
Danke schonmal

Ich möchte gern beim Klick auf einen Kunden in einer Liste Waren anzeigen.
Daher dachte ich an eine List und DataGrid etc.
Würde man da grundsätzlich anders heran gehen?

Vg
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: So 15.06.14 14:45 
Hallo,

das Vorgehen ist schon OK so, d.h. eine List<T> an eine List- oder ComboBox bzw. DataGridView zu binden. Aber wie Ralf schon schrieb, besser ist es eine Klasse (z.B. Ware) zu erzeugen und dann eine oder mehrere Eigenschaften zu erzeugen und diese dann als DisplayMember zu setzen (z.B. Name).

PS: Standard
Talemantros Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 444
Erhaltene Danke: 2

Win7 Proff 64bit
C# (VS2013)
BeitragVerfasst: So 15.06.14 19:52 
Hey,
Ich hoffe ich habe das richtig verstanden und versuche es mal zu bauen.
Danke

Gruß
iKilledKenny
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 394
Erhaltene Danke: 8

Win XP
D5 Prof, C# Express 2005
BeitragVerfasst: Mo 16.06.14 11:31 
Ich werf hier noch die ObservableCollection<T> in den Raum, die synchronisiert mit dem UI und feuert entsprechende Events.
Talemantros Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 444
Erhaltene Danke: 2

Win7 Proff 64bit
C# (VS2013)
BeitragVerfasst: Di 17.06.14 11:36 
Hi,
@iKilledKenny - Leider verstehe ich das nicht und habe mich erst mal an den anderen Ansatz gehalten.

@all
Also nachdem ich nun endlich Zeit hatte wollte ich mich mal damit auseinandersetzen und ein Erfassungsmodul für Kunden bauen.
Leider scheitere ich schon wieder relativ früh an vermutlich einer Kleinigkeit.
Würde dies gern hier posten mit der Bitte um Hilfe, ich denke bis das Modul fertig ist kommen noch einige Fragen hinzu leider ;-)

Ich habe eine Winform (siehe Anlage)
Ich fange mal klein an mit den Kontaktdaten des Kunden und einigen Kundeneinstellungen (TP, UNIT, Chargenbereich)

Dazu habe ich folgende kleine Modellklasse (noch ohne Validierung)

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:
24:
25:
26:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Recycle.Logics
{
    public class Customer
    {
        public long Id { get; set; }
        public long CustomerId { get; set; }
        public string CompanyName { get; set; }
        public string InvoiceName { get; set; }
        public string Charge { get; set; }
        public string Street { get; set; }
        public string Postale { get; set; }
        public string City { get; set; }
        public int ChargeBegin { get; set; }
        public int ChargeEnd { get; set; }
        public int Active { get; set; }
        public string DocumentPath { get; set; }
        public int HasUnit { get; set; }
        public int HasTp { get; set; }
     }
}


In der Winform habe ich eine BindingSource daran gebunden und folgenden Code im UserControl gemacht

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
        private void KundeNeuUserControl_Load(object sender, EventArgs e)
        {
            bsCustomer.DataSource = new Customer();
            txtCompanyName.Select();

            cmbTP.Items.Add("Nein");
            cmbTP.Items.Add("Ja");
            cmbUnit.Items.Add("Nein");
            cmbUnit.Items.Add("Ja");

            cmbDocument.DataSource = CustomerMethods.GetAllForms();
            cmbDocument.DisplayMember = "name";
            cmbDocument.ValueMember = "vorlagengrundid";
            cmbDocument.SelectedIndex = -1;

            lblChargeBegin.Text = CustomerMethods.GetChargeBegin().ToString();
            lblChargeEnd.Text = Convert.ToString(Convert.ToInt16(lblChargeBegin.Text) + 24);
        }


Über Databindinding habe ich dann die Steuerelemente an die BindingSource gekoppelt.

Nun habe ich , wie gesagt vermutlich für euch nur eine Kleinigkeit.
Wenn ich eine Combobox anklicke (egal welche) dann kann ich das Form nicht weiter verwenden und er bleibt immer aktiv in der Combobox.
Ich kann nicht mal mehr die Form schließen.

Einer eine Idee?
bzw. fällt jemandem schon ein andere "Fehler" auf, den man anders angehen würde?

Die Comboboxen sind mit den Werten HasUnit und HasTP gekoppelt, die ich als "int" habe, weil ich in der Datenbank 0 = Nein und 1 = Ja habe.
Könnte es daran liegen bzw. wie müsste ich dann vorgehen?

EDIT: Gerade mal die DB auf VarChar und die Properties auf "String" geändert, dann funktioniert es.
Wäre es den Grundsätzlich egal, ob 0 oder Nein in der DB steht (Datenbankgröße mit der Zeit)?
Wenn ja dann würde ich es so lassen und wenn nein besteht die Ausgangsfrage immer noch :-)
Wie ich das Databindung so nutze, dass die 0 aus der Datenbank quasi den SelectedIndex = 0 der Combobox setzt.

Ich wage mich jetzt schon mal an die Ausgangsfrage mit den List<String> einer Klasse.
Hoffe ich komme einigermaßen zurecht.

Gruß
Einloggen, um Attachments anzusehen!
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Di 17.06.14 14:00 
Zitat:
Die Comboboxen sind mit den Werten HasUnit und HasTP


Wie soll Ja/Nein denn da plötzlich zu 1 und 0 werden? Entweder du benutzt für diese Properties kein Databinding und mappst string nach int selbst oder du veröffentlichst die beiden Properties HasUnit, HasTP nochmal aus deiner Modelklasse als strings und mappst in getter/setter dieser beiden string Properties zwischen ja/nein und 1/0 bzw. umgekehrt. Aber was sollen da Comboboxen? Für ja/nein, true/false, 1/0 ausssagen fallen mir zuerst mal Checkboxen ein. Checkboxen sind dann auch irgendwie automatisch Sprachneutral was ja/nein eindeutig nicht ist.

Zitat:
Wäre es den Grundsätzlich egal, ob 0 oder Nein in der DB steht (Datenbankgröße mit der Zeit)?


Nein. Die Db sollte sauber sein und nichts enthalten nur weil es so in der Anwendung etwas ~einfacher~ ist. Üblicherweise leben Daten (also die DB) länger als Anwednungen. Der nächste der eine Anwendung mit dieser Datenbank schreiben muß wird dich für sowas zum Teufel wünschen. Oder du dich selbst wenn du die Anwendung mal lokalisieren willst.
Talemantros Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 444
Erhaltene Danke: 2

Win7 Proff 64bit
C# (VS2013)
BeitragVerfasst: Di 17.06.14 14:08 
Hallo Ralf,
danke für deine Antwort.
Wenn die Datenbank sauber sein sollte, also eher mit Klarschrift arbeiten (Nein und Ja)?

Ich habe es versucht mit den Checkboxen, weil ich es auch besser gefunden hätte, leider habe ich es nicht hinbekommen.
Es sind dann ja 2 Checkboxen die auf eine Property reagieren hätte sollen und irgendwie hat das nicht funktioniert.

Würdest du mir was Posten können?

Ich bin gerade an der Klasse dran, die ich dann in List<Klasse> bauen will.
Funktioniert logischerweise auch nicht auf anhieb :-(
Aber das versuche ich erst noch ein wenig weiter.

Danke

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


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Di 17.06.14 14:57 
Zitat:
Es sind dann ja 2 Checkboxen die auf eine Property reagieren hätte sollen und irgendwie hat das nicht funktioniert.


Wieso 2? Wenn die Property eine ja/nein Aussage darstellt ist es am ehesten ein Boolean und der hat 2 Zustände die den 2 Zuständen einer Checkbox (angehackt/nicht angehackt) entsprechen. Wofür willst du eine 2te CheckBox?

Zitat:
Wenn die Datenbank sauber sein sollte, also eher mit Klarschrift arbeiten (Nein und Ja)?


Definitiv nein. Klarschrift ist nur in einer Sprache Klarschrift! Für einen Großteil der Weltbevölkerung ist Klartext also eher Unklartext. In der Datenbank sollte es der elementarst mögliche Datentyp sein. Bei ja/nein also ein boolean. Wenn deine DB sowas nicht hat dann den kleinstmöglichen Int Typ nehmen (Die benuztze Datenklasse kann das dann ja wieder als Boolean veröffentlichen).
Talemantros Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 444
Erhaltene Danke: 2

Win7 Proff 64bit
C# (VS2013)
BeitragVerfasst: Di 17.06.14 22:01 
Nabend,
leider komme ich nicht zu richtig weiter.
Also erst mal zur Erklärung der 2 Steuerelemente muss ich einfach sagen, dass ich ganz banal Checkboxen mit RadioButtons verwechselt habe. Sorry.

Nun kann die MySQL Datenbank kein False/True (bzw. ich habe es nicht gefunden) und bin deshalb bei einem TinyInt geblieben um 0 und 1 abbilden zu können.
Weiterhin habe ich die Comboboxen gegen Checkboxen getauscht.

Für das Databinding habe ich die CheckState Eigenschaft des Steuerelements genommen.

Nun liefert dieses True oder False zurück. In die Datenbank muss ich aber 0 oder 1 schreiben.
Wie müsste ich die Property dazu umbauen.

Jeder Umbau, den ich gemacht habe hat diverse Fehler gemeldet.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
        private bool hasUnit;
        public bool HasUnit
        {
            get
            {
                return hasUnit;
            }
            set
            {
                hasUnit = value;
            }
        }


Da ich da nicht weitergekommen bin, habe ich mich mal der List<Klasse> gewidmet, die ich an ein DataGridView binden will für die Ansprechpartner

Dazu habe ich eine Klasse CustomerContact hinzugefügt

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
    public class CustomerContact
    {
        public CustomerContact(string authority, string title, string name, string email, string number, string mobil, string fax)
        {
            this.Authority = authority;
            this.Name = title + " " + name;
            this.Email = email;
            this.Number = number;
            this.Mobil = mobil;
            this.Fax = fax;
        }

        public string Authority { get; set; }
        public string Name { get; set; }
        public string Email { get; set; }
        public string Number { get; set; }
        public string Mobil { get; set; }
        public string Fax { get; set; }
    }


Und die Klasse Customer um folgendes erweitert

ausblenden C#-Quelltext
1:
        public List<CustomerContact> ListCostumerContact { get; set; }					


Dies habe ich per DataSource an das DataGridView gebunden. Der Designer hat dann zu meiner bestehenden BindingSource noch eine neue hinzugefügt.
Nun möchte ich die ausgefüllten Felder (siehe Anlage) beim Erfassen im DataGridView anzeigen um sie später nach dem alles ausgefüllt ist in der Datenbank abzulegen. (Bisher kein Plan wie das gehen wird)

Dazu habe ich folgenden Code probiert

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
        private void btnContactErfassen_Click(object sender, EventArgs e)
        {
            listCostumerContactBindingSource.Add(new CustomerContact(txtZustaendig.Text, cmbAnrede.Text, txtAnsprech.Text, txtEmail.Text, txtFestNetz.Text, txtMobil.Text, txtFax.Text));
            //newCustomer.ListCostumerContact.Add(new CustomerContact(txtZustaendig.Text, cmbAnrede.Text, txtAnsprech.Text, txtEmail.Text, txtFestNetz.Text, txtMobil.Text, txtFax.Text));
        }


Die zweite Zeile produziert einen Fehler!

Wäre dies so korrekt um sie später über die Klasse an die Methode zum Speichern zu geben?

Gruß
Einloggen, um Attachments anzusehen!
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Di 17.06.14 23:08 
Zitat:
Nun liefert dieses True oder False zurück. In die Datenbank muss ich aber 0 oder 1 schreiben.
Wie müsste ich die Property dazu umbauen.


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:
private bool hasUnit;
public bool HasUnit
{
    get
    {
        return hasUnit;
    }
    set
    {
        hasUnit = value;
    }
}
public Int32 HasUnitAsInt32
{
    get
    {
        return hasUnit ? 1 : 0;
    }
    set
    {
        hasUnit = value == 1;
    }
}


So bekommst du HasUnit als Bool oder als Int. Je nachdem wie du das gerade brauchst.

Zitat:
Die zweite Zeile produziert einen Fehler!


Aha. Was könntest du vergessen haben uns noch zu sagen?
Talemantros Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 444
Erhaltene Danke: 2

Win7 Proff 64bit
C# (VS2013)
BeitragVerfasst: Mi 18.06.14 07:07 
Guten Morgen,
danke für die Property.
Ich hatte immer mit Konstrukten versucht wie: if (value == false) hasUnit = 0 und ähnliches.
So richtig verstehen tue ich die Property nicht mit ? etc aber das versuche ich noch irgendwo nachzulesen.

Auf den Fehler bin ich nicht näher eingegangen, da das zuweisen der Daten zu der neu generierten BindingSource vom Compiler ja klappte.

Den Fehler habe ich mal in die Anlage gepackt.
"Der Objektverweis wurde nicht auf die Objektinstanz festgelegt"!

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
namespace Recycle.Controls
{
    public partial class KundeNeuUserControl : UserControl
    {
        long employee = 0;
        Customer newCostumer = new Customer();

        public KundeNeuUserControl(long uebergabe)
        {
            InitializeComponent();
            employee = uebergabe;
        }

        private void KundeNeuUserControl_Load(object sender, EventArgs e)
        {
            bsCustomer.DataSource = newCostumer;
            txtCompanyName.Select();

...


Wäre den dieses Vorgehen des Füllens der List richtig, damit ich dann später anständig die Daten auslesen kann?
Ich muss dann mal gucken wie das geht, den mit einer foreach wüsste ich nur wie ich einen Teil raus bekomme und nicht alle Teile.
Das wird noch Tricky für mich.

Gruß
Einloggen, um Attachments anzusehen!
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mi 18.06.14 09:29 
Hallo Talemantros,

der Fehler ist einfach eine NullReferenceException, d.h. debugge einfach deinen Code (Haltepunkt setzen) und schau, welches der Objekte noch nicht initialisiert wurde.
Der Debugger ist einfach ein unersetzliches Werkzeug für einen Entwickler: [Artikel] Debugger: Wie verwende ich den von Visual Studio?


Zuletzt bearbeitet von Th69 am Mi 18.06.14 09:39, insgesamt 1-mal bearbeitet
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mi 18.06.14 09:33 
Vielleicht hilft es dir auch wenn du den 2.ten Beitrag in diesem Thread nochmal liest. Mit der gewonnenen Erkenntnis dann nochmal schauen wie du die ListCostumerContact Property deiner Customer Klasse hinzugefügt hast.
Talemantros Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 444
Erhaltene Danke: 2

Win7 Proff 64bit
C# (VS2013)
BeitragVerfasst: Mi 18.06.14 11:51 
Ich habe nun folgendes geändert nach Durchsicht, des 2ten Beitrags

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
        public List<CustomerContact> ListCostumerContact { get; private set; }

        public Customer()
        {
            ListCostumerContact = new List<CustomerContact>();
        }


Und zuweisen würde ich es jetzt so wollen:

ausblenden C#-Quelltext
1:
                newCostumer.ListCostumerContact.Add(new CustomerContact(txtZustaendig.Text, cmbAnrede.Text, txtAnsprech.Text, txtEmail.Text, txtFestNetz.Text, txtMobil.Text, txtFax.Text));					


Nun kommt zwar keine Fehlermeldung mehr, aber die Daten werden auch nicht mehr in dem DataGridView angezeigt.
Der DataSourceEigenschaft hatte ich die Property ListCustomerContact zugewiesen.
Daraufhin hatte der Designer selbstständig eine neue BindingSource erstellt, die jetzt an das Grid gebunden ist.

Anscheinend trägt er die Daten in die List ein, zeigt sie aber nicht an

Tausend Dank

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


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mi 18.06.14 12:04 
Zitat:
Anscheinend trägt er die Daten in die List ein, zeigt sie aber nicht an


Die benutzte Listenklasse muß bestimmte Events werfen damit die Controls mitbekommen das sich da was geändert hat (Objekte wurde der Liste hinzugefügt oder entfernt). List<T> ist eine absolut rudimentäres Ding das nix tut außer Dinge verwalten. Alternativen für List<T> wären die bereits angesprochene ObservableCollection<T> oder eine BindingList<T>. Von der Oberfläche her sehen die für dich als verwernden genauso aus wie eine List<T>. SDolltest du also einfach ersetzen können. Dann bekommen die Controls mit wenn sich die Listen ändern. Wenn du über Code auch den Inhalt der Klassen die in der Listenklasse verwaltet werden auch änden willst und die Controls sollen das mitbekommen mußt du in diesen Klassen auch mit entsprechenden Events nachhelfen. Heißt deinen CustomerContact Klasse müßte Das INotifyProprtyChanged Interface implementieren.
Talemantros Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 444
Erhaltene Danke: 2

Win7 Proff 64bit
C# (VS2013)
BeitragVerfasst: Mi 18.06.14 14:14 
Danke.
Immer wenn ich zwischendrin mal Luft habe hier was zu machen fühlt es sich an, wie 2 Schritte nach vorn und einen nach hinten :-)
Naja man kann nicht alles auf Anhieb können.

Bevor ich dann noch heute Abend gleich wieder hänge weil ich einfach nichts finde im Netz.
Ich habe ForEach Schleifen gefunden, die bei List den Eintrag auslesen können.
Nun habe ich ja eine List, die aus mehreren "Spalten" besteht, die ich dann ja einzeln in der Datenbank speichern muss.

Kann mir da jemand noch eine einfache, nicht frustrierende Hilfestellung geben :-D

Wäre super

Danke

Die Eigene Anweisung zum Speichern in der Datenbank per SQL bzw. MySQl sollte ich hinbekommen. Nur die List aufspalten würde glaube erst mal reichen?!

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


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mi 18.06.14 20:38 
Zitat:
Nun habe ich ja eine List, die aus mehreren "Spalten" besteht, die ich dann ja einzeln in der Datenbank speichern muss.


Nein? So ganz verstehe ich dein Problem nicht du hast irgendeine Liste und da sind Klassen drin. Und du sagst das du das speichern in die DB hingbekommst. Wo ist dann das Problem einfach über die Liste zu iterieren und das für jede Klasse in der Liste zu tun?

Zitat:
Nur die List aufspalten würde glaube erst mal reichen?!


Nö? Warum willst du da was aufspalten?
Talemantros Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 444
Erhaltene Danke: 2

Win7 Proff 64bit
C# (VS2013)
BeitragVerfasst: Mi 18.06.14 22:49 
Hi,
wenn ich doch jetzt die List der Klasse CustomerContact habe. Und diese Klasse verschiedene Eigenschaften (Name, Email, Fax etc.)

Dann habe ich bei mehreren Einträgen folgende Situation

List<CostumerContact>
Eintrag1: Name, Email, Fax
Eintrag2: Name, Email, Fax

usw....

Nun muss ich doch jede Eigenschaft jeden Objekts der Liste beim Speichern durchlaufen und über Variablen in meinem SQL String in der Datenbank ablegen?!
Wenn ich nur Eintrag 1 als ganze Zeile mit einer Foreach auslese muss ich ja noch irgendwie dem System sagen, dass er die Spalte Fax in die entsprechende Zeile der Datenbank schreiben soll

ausblenden C#-Quelltext
1:
2:
3:
4:
foreach (string eintrag in ListCostumerContact) 
  {
      Console.WriteLine(eintrag);
  }


Dies würde ja nur für eine List mit jeweils einem EIntrag gelten.
Ich weiß leider nicht wie ich es besser ausdrücken soll.

Oder muss ich eventuell 2 Foreach irgendwie koppeln, damit die erste alle Zeilen durchläuft und die zweite alle Spalten?

Gruß