hilpers


  hilpers > microsoft.* > microsoft.german.entwickler.dotnet.csharp

 #1  
11.03.2010, 13:16
Manuel Kobloch
Hallo liebe Community,

ich habe eine Combobox, die etwa 20 Einträge beinhaltet. Die Anforderung ist
jetzt, dass die Einträge nicht aus einer Datenbank (Server) kommen sollen,
sondern aus einer Datei, die als Ressource dem Projekt hinzugefügt wurde und
später mit kompiliert wird.

Welche Möglichkeiten bieten sich mir da? Ich dachte an eine einfache
txt-Datei, die ich dann auslese und Zeile für Zeile der Combobox hinzufüge.
Jedoch hat es einen unprofessionellen Touch. Gibt es im .Net Framework
schon irgendwelche Klassen dafür?

danke für jede Hilfe

Grüße

Manuel
 #2  
11.03.2010, 14:56
Marcel Roma
Hallo Manuel,

Am Thu, 11 Mar 2010 15:16:20 +0100 schrieb Manuel Kobloch:

> ich habe eine Combobox, die etwa 20 Einträge beinhaltet. Die Anforderung ist
> jetzt, dass die Einträge nicht aus einer Datenbank (Server) kommen sollen,
> sondern aus einer Datei, die als Ressource dem Projekt hinzugefügt wurde und
> später mit kompiliert wird.


Wenn es reine Texteinträge sind, würde ich sie einfach im Forms-Editor der
Items-Auflistung hinzufügen. Natürlich kannst Du auch eine Text- oder
XML-Datei als Ressource einbetten, oder eine eigens dafür geschriebene
Klasse serialisieren etc., aber wozu der Aufwand?

Gruss
Marcel
 #3  
11.03.2010, 15:05
Ulf Kadner
On Thu, 11 Mar 2010 15:16:20 +0100, Manuel Kobloch wrote:

> ich habe eine Combobox, die etwa 20 Einträge beinhaltet. Die Anforderung ist
> jetzt, dass die Einträge nicht aus einer Datenbank (Server) kommen sollen,
> sondern aus einer Datei, die als Ressource dem Projekt hinzugefügt wurde und
> später mit kompiliert wird.


Also werden sich diese Daten nicht innerhalb einer fertig kompilierten
Aseembly, bei normaler Nutzung ändern? Denn nur dann würde es mit einer
einkompilierten Resource funktionieren. In dem Fall einfach über den
Resourcemanager des Projekts die entsprechende Textdatei hinzufügen.

Wenn sich die Daten bei Nutzung ändern sollen, dann lege diese z.B in der
Nutzereigenen Settingsdatei z.B. als StringCollection ab.

> Gibt es im .Net Framework
> schon irgendwelche Klassen dafür?


Alles Fertig mit grafischer Oberfläche in VS vorhanden.
Zugriff dann bei Resourcen über Properties.Resources.Resourcename bzw.
typisiert bei Einstellungen über Properties.Settings.Default.Settingname

Resourcen + Einstellungen kannst Du z.B. Über die Projekteinstellungen
verwalten. (Rechtsklick im Solutionexplorer aufs Projekt => Einstellungen)

MfG, Ulf
 #4  
11.03.2010, 18:58
Frank Dzaebel
Hallo Manuel,

> ich habe eine Combobox, die etwa 20 Einträge beinhaltet. Die Anforderung
> ist jetzt, dass die Einträge nicht aus einer Datenbank (Server) kommen
> sollen, sondern aus einer Datei, die als Ressource dem Projekt
> hinzugefügt wurde und später mit kompiliert wird.
> Welche Möglichkeiten bieten sich mir da? Ich dachte an eine einfache
> txt-Datei,


eher ungewöhnlich. Dann eher gängig: Ressourcendatei (Resx-Datei, die
beim Neuhinzufügen eh schon auf "Buildvorgang: eingebettet" ist, wobei
wichtig wäre, ob ein Lokalisierung/Globalisierung gemacht werden soll),
oder XML-Datei. Natürlich auch viele andere Formate möglich, oder eben
eine
Klasse mit einer Auflistung nehmen. Ich selber halte solche Sachen ~gerne
in
einer Klasse. Man kann u.a. auch Intellisense mit XML-Kommentaren für die
Member einfügen.


ciao Frank
 #5  
12.03.2010, 07:26
Manuel Kobloch
Hallo,

danke für die vielen Antworten. Derzeit ist keine Lokalisierung geplant,
könnte aber in Zukunft ein Thema sein. Daher möchte ich mir natürlich nichts
verbauen. Derzeit tendiere ich zu einer Ressourcendatei, doch fehlt mir da
ein wenig die Erfahrung.

Ich habe jetzt eine Recourcendatei mit dem Namen "ControlInhalten.resx"
angelegt. Dort stehen folgende Infos drin.


Name, Wert
------------------
combo1_1, "Manuel"
combo1_2, "Manfred"
combo1_3, "Michael"
combo2_1; "Bayern"
combo2_2; "Stuttgart"


Ich kann im Quellcode nun mit der Eingabe von "ControlInhalten.xxx" den Wert
von bestimmten Einträgen abfragen. Wie kann ich jedoch in einer schönen
Schleife sämtliche Werte für die combobox1 (combo1) abfragen und der
Combobox hinzufügen?

Grüße

Michael
 #6  
12.03.2010, 08:50
Frank Dzaebel
Hallo Manuel,

> Ich habe jetzt eine Recourcendatei mit dem Namen "ControlInhalten.resx"
> angelegt. Dort stehen folgende Infos drin.
> Wie kann ich jedoch in einer schönen Schleife sämtliche Werte für die
> combobox1 (combo1) abfragen und der Combobox hinzufügen?


In deinem Beispiel etwas wie:

private void Form1_Load(object sender, EventArgs e)
{
Assembly asm = Assembly.GetExecutingAssembly();
// string[] namen = asm.GetManifestResourceNames();
ResourceManager rm = new ResourceManager(
this.GetType().Namespace + ".ControlInhalten", asm);
var rs = rm.GetResourceSet(CultureInfo.CurrentCulture, true, true);
ResToCombo(rs, "combo1_", combo1);
ResToCombo(rs, "combo2_", combo2);
}

private void ResToCombo(ResourceSet rs,
string resBeginName, ComboBox combo)
{
foreach (DictionaryEntry de in rs)
{
string key = (string)de.Key;
if (key.StartsWith(resBeginName))
combo.Items.Add(de.Value);
}
}


ciao Frank
 #7  
12.03.2010, 11:11
Manuel Kobloch
Vielen dank Frank!

hab die Methode in leicht umgeschriebener Form nun bei mir eingebaut.
Funktioniert super. Ist dieser Lösungsweg auch halbwegs professionell oder
würde jeder halbwegs geschulter Programmierer den Kopf schütteln?

mal was nebenbei....

Wenn man diese Newsgroups länger verfolgt, wird man immer wieder auf den
Namen Frank Dzaebel stoßen, wie er mit guten Ratschlägen oder Tipps jedem
kostenlos weiterhilft. Dafür ein großes Dankeschön!

"Frank Dzaebel" <Post> schrieb im Newsbeitrag
news:1796
[..]
 #8  
13.03.2010, 08:53
Frank Dzaebel
Hallo Manuel,

> [...] Funktioniert super.


das freut mich.


> Ist dieser Lösungsweg auch halbwegs professionell oder würde jeder
> halbwegs geschulter Programmierer den Kopf schütteln?


Wenn die Vorgabe ist, dass eine eigene Datei benutzt wird,
die zum einen eingebettet ist und die ggf. später noch lokalisiert
werden soll, ist das eine solide Lösung.

Klar, bei Lokalisierung geht man ansonsten oft
den Weg über Satelliten-DLL's, die dann zum Beispiel über die
Language-Eigenschaft der Form manipuliert werden, sodass solch
kleine Ressourcen~Mengen direkt über den Windows Forms
Designer direkt in die Eigenschaften des Controls (hier ComboBox)
eingegeben werden. Der Designer setzt das dann selbstständig in
Code um, der (zum Beispiel über ApplyResources(...)) Dir das alles
automatisch einfügt. Es sollte also schon einen Grund geben, warum
diese (obigen) Vorgaben notwendig sind. Wenn dem aber so ist, so
ist die Lösung schon ok.




> mal was nebenbei....
>
> Wenn man diese Newsgroups länger verfolgt, wird man immer wieder auf den
> Namen Frank Dzaebel stoßen, wie er mit guten Ratschlägen oder Tipps
> jedem kostenlos weiterhilft. Dafür ein großes Dankeschön!


:-)


ciao Frank
Ähnliche Themen
[VB6] Best practise: Datensatzaggregierung und Anzeige

Hallo, ein externes Programm schreibt andauernd jede Sekunde einen Float-Wert in eine/mehrere Datei(en). Diese Werte sollen als Graphen visualisiert werden, und zwar...

ISA 2004 / Best Practise Analyzer

Hallo werte SBS 2003 R2 Kenner, ich habe den ISA-Server 2003 (SP 3 wurde auch installiert) und habe einige Problemchen, die mir der BEst Practice Analyzer zeigt. Anmerkung...

Mehrschichten - Best practise

Hallo zusammen Ich bin auf der Suche nach einigen Vorschlägen wie eine Web-Basierende Mehrschichten (3-tier) Anwendung programmiert werden soll. Dabei versuche ich den...

best practise: servergespeicherte profiles

hallo, möchte für einen sbs-2003-std-server mit fünf client-rechnern die profiles am server ablegen. in welchem verzeichnis am server sind nun die profiles am...


Alle Zeitangaben in WEZ. Es ist jetzt 18:54 Uhr. | Privacy Policy