Entwickler-Ecke
WinForms - Listbox speichern, löschen, einlesen
matze94 - Fr 17.09.10 19:46
Titel: Listbox speichern, löschen, einlesen
ich hab einen vb code zu diesen funktionen gefunden und in c# über setzt blos funktioniert es nicht. es kommt beim löschen und beim einlesen die fehlermeldung:
"Die Items-Auflistung kann nicht geändert werden, wenn die DataSource-Eigenschaft festgelegt ist."
hier ist mal der entsprechende ausschnitt.
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: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66:
| public void ListBox_Save(ListBox ListBox, string sFile) {
System.IO.StreamWriter oStream = null; short i = 0;
oStream = new System.IO.StreamWriter(sFile);
for (i = 0; i <= ListBox.Items.Count - 1; i++) { oStream.WriteLine(ListBox.Items); } oStream.Close(); }
public void ListBox_Read(ListBox ListBox, string sFile) {
System.IO.StreamReader oStream = null; string sLine = null;
ListBox.Items.Clear(); System.IO.FileInfo oFile = new System.IO.FileInfo(sFile);
if (oFile.Exists == true) { oStream = new System.IO.StreamReader(sFile); do { sLine = oStream.ReadLine(); if ((sLine == null)) break; ListBox.Items.Add(sLine); } while (true); oStream.Close(); } }
private void button12_Click(object sender, EventArgs e) { string sFile = null;
sFile = Application.StartupPath + "\\Liste.dat"; ListBox_Save(listBox1, sFile); }
private void button13_Click(object sender, EventArgs e) { ListBox.Items.Clear(); }
private void button14_Click(object sender, EventArgs e) { string sFile = null; sFile = Application.StartupPath + "\\Liste.dat"; ListBox_Read(listBox1, sFile); } |
Moderiert von
Christian S.: Topic aus C# - Die Sprache verschoben am Fr 17.09.2010 um 19:48
Yogu - Fr 17.09.10 20:34
Schau mal im Eigenschaftsfenster, ob die DataSource-Eigenschaft tatsächlich festgelegt ist. Ist dem so, solltest du den Verweis entfernen. Natürlich darf auch nirgends im Code die Eigenschaft gesetzt werden.
matze94 - Sa 18.09.10 14:05
danke die funktion die einträge in die listbox erstellt hat, bzw. die die sie entfernt hat hatten eine data source eigenschaft ich hab die funktionen rausgelassen, auch aus anderen grund
Yogu - Sa 18.09.10 17:01
Ist das Problem jetzt gelöst oder nicht? :gruebel:
Wenn nicht, hast du wirklich alle Verweise auf DataSource entfernt? Benutze sicherheitshalber mal die Suche in Dateien von Visual Studio.
matze94 - Sa 18.09.10 17:32
das einlesen von eigenen dateien klappt
das löschen bedingt, d.h. nicht mit eingelesen itemen, liegts vielleicht am code?
C#-Quelltext
1:
| listBox1.DataSource = null; |
somit konnte ich das data sourche problem umgehen
das einzige problem ist das speichern, es erzeugt zwar eine datei doch steht nur
| Zitat: |
| System.Windows.Forms.ListBox+ObjectCollection |
drin und zwar so viel mal wie iteme in der list box sind also sind drei iteme drinnen speichert er dreimal diesen code
hier mal der code ders speichern soll
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| string sFile = Application.StartupPath + "\\Liste.xml"; System.IO.StreamWriter oStream = null; int i = 0;
oStream = new System.IO.StreamWriter(sFile); while(i < listBox1.Items.Count) { oStream.WriteLine(listBox1.Items[i]); i = i + 1 ; } oStream.Close(); |
Yogu - Sa 18.09.10 18:28
matze94 hat folgendes geschrieben : |
das einlesen von eigenen dateien klappt
das löschen bedingt, d.h. nicht mit eingelesen itemen, liegts vielleicht am code?
C#-Quelltext 1:
| listBox1.DataSource = null; |
somit konnte ich das data sourche problem umgehen |
Naja - brauchst du jetzt eine DataSource oder nicht? Wenn du keine brauchst, solltest du einfach alles, was mit ihr zu tun hat, löschen. Sonst solltest du mit der Datenquelle anstatt der ListBox arbeiten.
matze94 hat folgendes geschrieben : |
das einzige problem ist das speichern, es erzeugt zwar eine datei doch steht nur
| Zitat: | | System.Windows.Forms.ListBox+ObjectCollection |
drin und zwar so viel mal wie iteme in der list box sind also sind drei iteme drinnen speichert er dreimal diesen code
hier mal der code ders speichern soll |
Das war zwar nicht der richtige, aber oben hast du ihn ja gepostet ;)
Der Fehler dort ist mir vorher noch gar nicht aufgefallen:
matze94 hat folgendes geschrieben : |
C#-Quelltext 10: 11: 12: 13:
| /* ... */ for (i = 0; i <= ListBox.Items.Count - 1; i++) { oStream.WriteLine(ListBox.Items); } | |
Muss natürlich
ListBox.Items[i] heißen.
matze94 - Sa 18.09.10 18:56
ich hab jetzt den code oben ausgetauscht (in richtiger fassung) und er funktioniert, so wie ich es will!
vielen dank, tolles forum
CityHunter - So 29.04.12 14:04
Hallo,
ich arbeite an sowas gleiches leider kriege ich das nicht hin es in einer XML datei die Werte aus der ListBox zu speichern.
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: 27: 28: 29: 30: 31: 32:
| void ListeSpeichern() { xmlDateiname = System.IO.Path.ChangeExtension(Application.ExecutablePath, ".xml"); xmlVorhanden = System.IO.File.Exists(xmlDateiname); XmlWriterSettings einstellungen = new XmlWriterSettings(); einstellungen.Indent = true; XmlWriter xmlSchreiben = XmlWriter.Create(xmlDateiname, einstellungen); xmlSchreiben.WriteStartDocument(); xmlSchreiben.WriteStartElement("ListenBox"); for (int i = 0; i < listBox1.Items.Count - 1; i++) { xmlSchreiben.WriteStartElement("eintrag"); xmlSchreiben.WriteElementString("Eingabefeld",listBox1.SelectedItems.ToString()); xmlSchreiben.WriteEndElement(); }
xmlSchreiben.WriteEndDocument(); xmlSchreiben.Close(); } |
Hoffe mir kann da einer weiter helfen.
Wünsche euch ein schönen Feiertag.
Th69 - So 29.04.12 20:22
Hallo CityHunter :welcome:
hast du auch die markierte Anmerkung von Yogu hier in diesem Beitrag gelesen?
P.S: Beim nächsten Mal eröffne besser einen eigenen Beitrag (und verweise evtl. auf einen anderen), damit sich die Antworten nicht vermischen.
CityHunter - So 29.04.12 20:52
Ja habe ich. Naja jedes mal wenn ich irgend wo im Forum was neues aufmache wird es gelöscht weil das schon gibt in einer abgewanden Form. Ja habe das mit [i] Probiert aber keine ahnung vielleicht habe ich ja auch ein Logik fehler drin. Die sind ja bissel schwerer zufinden als ein Syntax fehler ^^
Moderiert von
Th69: Full-Quote entfernt.
Yogu - Mo 30.04.12 13:06
Was mir noch auffällt ist, dass du das Element "ListenBox" öffnest (Zeile 15), aber nicht schließst (sollte vor WriteEndDocument passieren). Wenn das auch nicht hilft, solltest du uns auf jeden Fall sagen, was genau nicht funktioniert (Compilerfehler? Exception? Unerwartetes Verhalten?)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!