myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » GUI: Windows-Forms » Liste von eigener Klasse an DataSource binden
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Liste von eigener Klasse an DataSource binden

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
syn87
myCSharp.de-Mitglied

Dabei seit: 23.04.2008
Beiträge: 87


syn87 ist offline

Liste von eigener Klasse an DataSource binden

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo Jungs,

ich hab mal wieder ein kleines Problem beim programmieren meiner Server-Client Anwendung.

Der Client bekommt vom Server ein List<Row> Element. Row ist ein selbst erstellter Datentyp, der eine Antwortzeile der Datenbank repräsentiert.

Bei SELECT NAME, VORNAME FROM KUNDE hab ich also eine Liste von Rows, die über this["NAME"] und this["VORNAME"] die jeweiligen Daten returnen (alternativ auch this[0] und this[1]).

Wo ich jetzt Probleme habe ist beim DataSource anlegen. Im grunde genommen wäre es so, dass ich pro DB Table eine weitere Klasse anlege. Wie z.b.

C#-Code:
class Ort {
public string Display { get { return this["ORT"]; } }
public string Value { get { return this["ORT_ID"]; } }
}

Dabei muesste Ort meiner meinung nach nur noch von Row erben und ich muesste die List<Row> auf List<Ort> casten. Geht jedoch nicht. Leider bin ich in dieser Idee relativ festgefahren und weiss nich so recht weiter. Eine neue Liste zu generieren kann ja auch nicht Sinn der Sache sein.

Hat jemand eine Idee oder anderen Ansatz?


Danke füers durchlesen und hoffentlich faellt jemanden was ein smile
Neuer Beitrag 25.05.2008 19:20 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
herbivore
myCSharp.de-Poweruser/ Experte

avatar-2627.gif


Dabei seit: 11.01.2005
Beiträge: 49.483
Entwicklungsumgebung: csc/nmake (nothing is faster)
Herkunft: Berlin


herbivore ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo syn87,

mit dem Casten bist du vollkommen auf dem Holzweg.

Willst du die ganze Liste oder jeweils nur ein Element an das Control binden?

Und noch wichtiger: An was für ein Control willst du die Daten binden?

herbivore
Neuer Beitrag 25.05.2008 21:04 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
syn87
myCSharp.de-Mitglied

Dabei seit: 23.04.2008
Beiträge: 87

Themenstarter Thema begonnen von syn87

syn87 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

ja das mit dem control hab ich leider vergessen. in meinem fall handelt es sich um eine combobox.

meine idee ( um nochmal darauf zu sprechen zu kommen ) war es, fuer alle moeglichen db tabellen einen typ zu erstellen, der die Row Klasse im grunde nur um 2 Eigenschaften erweitert (zur laufzeit). naemlich display und value (was man zum binden der liste ja braucht) eigenschaft.

meine momentane idee geht in die richtung, dass ich fuer alle moeglichen feldnamen eine eigenschaft in der Row Klasse anlege. zb.

public string ORT_ID { get { return this["ORT_ID"]; } }

gefaellt mir allerdings auch nicht so sehr. es ist schade dass man beim datasource binden keine funktionen mit parameter uebergeben kann unglücklich oder geht das vllt doch? hab es bisher nur mit eigenschaften gesehen.


lg matze
Neuer Beitrag 25.05.2008 21:42 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
herbivore
myCSharp.de-Poweruser/ Experte

avatar-2627.gif


Dabei seit: 11.01.2005
Beiträge: 49.483
Entwicklungsumgebung: csc/nmake (nothing is faster)
Herkunft: Berlin


herbivore ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo syn87,

du brauchst nicht von der Row-Klasse abzuleiten. Du kannst DataTables direkt binden. Es sollte reichen ValueMember und DisplayMember auf die Namen der entsprechenden Spalten zu setzen.

herbivore
Neuer Beitrag 25.05.2008 22:28 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
syn87
myCSharp.de-Mitglied

Dabei seit: 23.04.2008
Beiträge: 87

Themenstarter Thema begonnen von syn87

syn87 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ich hab leider noch nix von DataTable gehoert. Aber ich denke du gehst davon aus, dass das Program Zugriff auf die DB hat, was jedoch nicht so ist. Die Daten werden vom Server abgerufen und jede Zeile wird mittels eines Objekts folgender Klasse gespeichert

C#-Code:
    [Serializable]
    public class Row
    {
        Dictionary<string, string> row;

        public Row()
        {
            this.row = new Dictionary<string, string>();
        }

        public string this[int key]
        {
            get
            {
                int i = 0;
                foreach (string k in row.Keys)
                {
                    if (i == key)
                        return this[k];
                    i++;
                }
                return "";
            }
        }

        public string this[string key]
        {
            get
            {
                return row[key];
            }
            set
            {
                row[key] = value;
            }
        }

        public bool ContainsKey(string k)
        {
            return row.ContainsKey(k);
        }

        public Dictionary<string, string>.KeyCollection Keys
        {
            get
            {
                return row.Keys;
            }
        }
}

und danach zu einer List zusammengefasst. Um die Netzwerklast zu minimieren, koennen verschiedene Listen von Rows synchronisiert werden. Aendert sich zum Beispiel die Ort Tabelle, so wird diese Liste neu verschickt. Deshalb ist der Typ beim uebertragen (List<Row>) auch nicht mehr aenderbar... (zumindest nach meinem momentanen stand) ... ja is schon kompliziert unglücklich
Neuer Beitrag 25.05.2008 22:46 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Peter Bucher Peter Bucher ist männlich
myCSharp.de-Poweruser/ Experte

avatar-4103.jpg


Dabei seit: 17.03.2005
Beiträge: 5.914
Entwicklungsumgebung: VS 2017 / VS Code
Herkunft: Zentralschweiz


Peter Bucher ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo syn87

Alles was Eigenschaften hat, kannst du direkt und ohne Umwege binden.


Gruss Peter
Neuer Beitrag 25.05.2008 23:12 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
syn87
myCSharp.de-Mitglied

Dabei seit: 23.04.2008
Beiträge: 87

Themenstarter Thema begonnen von syn87

syn87 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ok danke.

Vllt findet sich noch jemand, der was zum eigentlichen Problem sagen kann.

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von syn87 am 25.05.2008 23:27.

Neuer Beitrag 25.05.2008 23:23 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
JuyJuka JuyJuka ist männlich
myCSharp.de-Poweruser/ Experte

avatar-2316.jpg


Dabei seit: 30.11.2005
Beiträge: 2.187
Entwicklungsumgebung: VS2015
Herkunft: Deutschland


JuyJuka ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hi,

Ich hab jetzt nicht den ganzen Thread gelesen, aber ich denke/hoffe, dass folgender Thread/Beitrag hier hilft:  SortedList ComboBox ID DataBinding Problem
((Die dort beschriebene Technik funktionoiert auch für DataGridView's oder ähnliches, über all wo man eine DataSource auswählen kann.))

Gruß
Juy Juka
Neuer Beitrag 25.05.2008 23:25 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
herbivore
myCSharp.de-Poweruser/ Experte

avatar-2627.gif


Dabei seit: 11.01.2005
Beiträge: 49.483
Entwicklungsumgebung: csc/nmake (nothing is faster)
Herkunft: Berlin


herbivore ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo syn87,

Zitat:
Ich hab leider noch nix von DataTable gehoert.

das kannst du ja leicht ändern.

Zitat:
Aber ich denke du gehst davon aus, dass das Program Zugriff auf die DB hat, was jedoch nicht so ist

Eine DataTable kann man aus einer Datenbank füllen, muss man aber nicht. Ich war nur fälschlich davon ausgegangen, dass du schon DataTable (bzw. DataRow) benutzt.

Aber DataTable ist natürlich nur eine Option, denn es gilt, was Peter Bucher gesagt hat.

Zitat:
Alles was Eigenschaften hat, kannst du direkt und ohne Umwege binden.

herbivore
Neuer Beitrag 26.05.2008 02:15 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 12 Jahre.
Der letzte Beitrag ist älter als 12 Jahre.
Antwort erstellen


© Copyright 2003-2021 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 18.01.2021 17:01