C# Daten an ein Public Steuerelement übergeben...

klaus2003

Cadet 1st Year
Registriert
Sep. 2011
Beiträge
12
Hallo zusammen,

ich habe mir ein kleines Programm erstellt, bei dem ich die Daten von einem Modul direkt an ein Steuerelement mit der Eigenschaft Public übergeben möchte.

Das Steuerelement ist eine Combobox und besitzt die Eigenschaft Public - lässt also den Zugriff von einem anderen Formular / einer anderen Klasse zu.

Die Kompilation des Programmes erzeugt keinerlei Fehler, aber die zuvor gebildeten Daten werden nicht in der zugewiesenen Combobox dargestellt.

Daher meine Frage, ist die Datenübergabe (bei bereits geöffnetem Formular) auf diese Weite möglich oder muss hierfür eine andere Form (Art des Senders (Klasse)) oder eine Art Zwischenspeicherung in einer Temp Datei verwendet werden?

Habe die Daten daher in einer separaten Klasse untergebracht, weil ich zukünftig von mehreren Formularen zentral auf diese Daten zugreifen möchte - möchte unnötigen Quelltext im Sinne von doppelten dezentralen Prozeduren vermeiden.
 
Ohne code ist es schwer das zu beurteilen.
Ich würde sagen es sollte möglich sein. Wie Übergibst du die Daten? Mit welchem Aufruf? "setEigenschaft(Wert)"?
oder combobox.eigenschaft = Wert?

Sollte beides gehen?!
 
Zuletzt bearbeitet:
ev mal Update() oder Invalidate() des Controls aufrufen, sobald die Daten übergeben wurden; wenn das allerdings aus einem anderen Thread als dem UI Thread passieren sollte (und du über try/catch Fehler abfängst), muss die Invoke() Routine des Steuerelements aufgerufen werden.
 
Also ich lese die Daten mittels XML Reader aus einer XML Datei ein, wandele dieses in Data Set um (damit ich es entsprechend Filtern kann) und diese gefilterten Daten aus Spalte A möchte ich nun mittels

Da ich mehr als eine Ergebniszeile besitze, habe ich noch eine Schleife herum gebaut:

C#:
Form2 Form2 = new Form2();

for (int cr = 0; cr < dattbl.Rows.Count; cr++)
{
    srch_result = dattbl.Rows[cr].Field<string>("Beschriftung");
    Form2.combobox1.items.add(srch_result);
}

Und genau bei der Zeile Form2.combobox1 werden keine Daten an das entsprechende Formular in entsprechendes Steuerelement übergeben.

Wie bereits erwähnt, ist Steuerelement combobox1 auf Public eingestellt. Daher kann ich auf Form2.combobox1.items.add() zugreifen.
 
Also mich wundert, dass items bei dir klein ist?

Aber was heißt "keine Daten übergeben"? Steht denn in srch_result was brauchbares drin?
 
Zuletzt bearbeitet:
C#:
for (int cr = 0; cr < dattbl.Rows.Count; cr++)
{
    srch_result = dattbl.Rows[cr].Field<string>("Beschriftung");
    Form2.comboBox1.Items.Add(srch_result);
}

Das ist der aus dem Programm heraus kopierte Text - wie man erkennen kann, ist Items groß und ja, es steht in der Variable srch_result auch was brauchbares drin, denn Debug.Print(srch_result); funktioniert und zeigt auch die gewünschten Daten an. Aber das bei Debug angezeigte Ergebnis wird leider nicht an die Combobox1 in Formular 2 übergeben.
 
Und Form2 wird nur einmal genau an der Stelle erzeugt?
Was passiert denn, wenn du Form2.comboBox1.Add("Irgendwas") machst?
Was ist, wenn du im Constructor von Form2 der comboBox1 etwas hinzufügst?

Der Kreativität herumzuprobieren, wie und ob etwas funktioniert, sind eigentlich kaum Grenzen gesetzt...
 
klaus2003 schrieb:
Habe die Daten daher in einer separaten Klasse untergebracht, weil ich zukünftig von mehreren Formularen zentral auf diese Daten zugreifen möchte - möchte unnötigen Quelltext im Sinne von doppelten dezentralen Prozeduren vermeiden.
Ein Soll/Ist Abgleich - Du sagst die Formulare sollen auf die zentralen Daten zugreifen. Dem widerspricht dann aber, dass die Formulare über fremde Controls auf Daten zugreifen. In deinem Szenario sollten die Forms untereinander maximal Verweise auf deine Daten austauschen, wie ein pkey oder die rows oder tables.
Das ist aber nur ein Architekturhinweis. Hauptsache bleibt der Code löst was er soll.

klaus2003 schrieb:
Also ich lese die Daten mittels XML Reader aus einer XML Datei ein, wandele dieses in Data Set um
nimm lieber DataSet.ReadXml(String, XmlReadMode)
 
Zuletzt bearbeitet:
Also ich würde empfehlen das Ganze mit Bindings zu machen. Falls richtig eingesetzt aktualisiert du nur deine Daten und die GUI wird "automatisch informiert".

Hier mal zur Microsoft Doku dazu:
Auch würde ich empfehlen deine Programme nach dem MVP bzw. MVVM aufzubauen.
MVP

Das ist zwar jetzt keine schnelle Hilfe für dein Problem aber hilft vielleicht trotzdem :)
 
  • Gefällt mir
Reaktionen: I'm unknown
lade doch dein code bei github hoch da kann man viel schneller helfen denn :p
 
klaus2003 schrieb:
denn Debug.Print(srch_result); funktioniert
Ich empfehle dir den VisualStudio-Debugger zu benutzen, der ist 100x praktischer als solche Ausgaben.
Damit kannst du dir auch live anschauen, was in den .Items der Combobox steht.

Public Usercontrols finde ich aber kein gutes Design. Übergib doch dem Form die anzuzeigenden Daten (entweder per Methode oder, wenn du das Form eh nur dafür neu aufbaust, direkt im Konstruktor) und lass es sich selbst um die Anzeige kümmern.
Wenn das immer noch nicht klappt und du selbst mit Debugger nicht drauf kommst, fängst du ganz vorne an, bis du auf das Problem stößt: Zweite Combobox anlegen mit festen Werten. Dann per Code feste Testdatensätze hinzufügen. Dann dynamisieren. Irgendwo wird dir der Fehler begegnen.
 
  • Gefällt mir
Reaktionen: mylight
Oma Erna schrieb:
Woher weissßt du was ich lese?
Ähm, ganz einfach deshalb:
tollertyp schrieb:
Deshalb. Und ja, dass ich dir egal bin, habe ich gemerkt, sonst hättest du das ja gelesen...

Und ich bin dir dankbar, dass du nicht mal verstehst, was ich mit "alten" Thread meine. Ich meine es gab jetzt keinen Grund zur Hektik hier schnell zu antworten...
 
Zurück
Oben