Portál AbcLinuxu, 17. července 2025 06:37


Dotaz: C# Uložení BindingListu do souboru

3.12.2011 21:13 Igor
C# Uložení BindingListu do souboru
Přečteno: 407×
Odpovědět | Admin
Zdravím, Potřeboval bych prosím poradit, jak v C# co nejsnáze uložit BindingList do souboru. Jde mi o to, že po ukončení aplikace potřebuju data v něm zachovat a při znovuspuštění načíst...nic neobvyklého. Je mi jasné, že řešením by bylo vymyslet algoritmus, kde jednotlivé prvky přesypu do souboru a pak z nich zase BindingList vytvořim. Ale nemá C# přímo nějakou snažší fičuru pro uložení BindingListu?

Díky za radu

Řešení dotazu:


Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Řešení 1× (PaulosV)
3.12.2011 21:28 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: C# Uložení BindingListu do souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
Mefunguje něco jako:
IFormatter formatter = new BinaryFormatter();
Stream stream = new FileStream("MyFile.bin", FileMode.Create, FileAccess.Write, FileShare.None);
formatter.Serialize(stream, MyBindingList);
stream.Close();

//X

IFormatter formatter = new BinaryFormatter();
Stream stream = new FileStream("MyFile.bin", FileMode.Open, FileAccess.Read, FileShare.Read);
MyBindingList<tx> MyBindingList = (BindingList<Tx>) formatter.Deserialize(stream);
stream.Close();
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
PaulosV avatar 3.12.2011 21:50 PaulosV | skóre: 10 | blog: dentoob
Rozbalit Rozbalit vše Re: C# Uložení BindingListu do souboru
Neboli serializace objektů, s níž se dá uložit do souboru takřka jakýkoliv .NET objekt a poté jej zase s minimální námahou ze souboru vyvolat (deserializace). Ten příklad bude asi v pořádku, jen ještě zdůrazním, že pak existuje metoda XML serializace; to udělá výsledný soubor mírně čitelnější a používá se to podobně, jen se použije
var formatter = new System.Xml.Serialization.XmlSerializer();
místo BinaryFormatter.

(var mi umožní vynechat datový typ proměnné, takže místo string abc = "def"; můžu použít var abc = "def"; - ale je vhodnější to používat s něčím jednoznačným, třeba s Listem.)
4.12.2011 00:26 Igor
Rozbalit Rozbalit vše Re: C# Uložení BindingListu do souboru

Díky moc. To mi to hodně ulehčí, akorát deserializaci jsem nerozchodil. Ikdyž k načtení snad dojde, ale v BindingListu nic není. Dělám chybu jinde? Nebo jsem to nepochopil?

 public static class Data
    {
        private static BindingList<Kontakt> kontakty = new BindingList<Kontakt>();

        public static void Uloz()
        {
            IFormatter formatter = new BinaryFormatter();
            Stream stream = new FileStream("kontakty.bin", FileMode.Create, FileAccess.Write, FileShare.None);
            formatter.Serialize(stream, kontakty);
            stream.Close();
        }

        public static void Nacti()
        {
            IFormatter formatter = new BinaryFormatter();
            Stream stream = new FileStream("kontakty.bin", FileMode.Open, FileAccess.Read, FileShare.Read);
            BindingList<Kontakt> kontakty = (BindingList<Kontakt>)formatter.Deserialize(stream);
            stream.Close();
        }
    }

Řešení 1× (PaulosV)
PaulosV avatar 4.12.2011 00:58 PaulosV | skóre: 10 | blog: dentoob
Rozbalit Rozbalit vše Re: C# Uložení BindingListu do souboru
V metodě Nacti() načítáš obsah souboru do lokální proměnné, se kterou pracuješ jen v té dané metodě a nikde jinde, takže se nepřenese do BindingListu, který máš někde jinde.

Řešení? Budeš asi chtít, aby metoda Nacti() vracela BindingList<Kontakt>, který sis načetl ze souboru do proměnné kontakty, takže té metodě nastavíš návratový typ BindingList<Kontakt> a nakonec vrátíš:
return kontakty;
A řešení pro část kódu, odkud voláš načítací metodu, si už asi domyslíš.
4.12.2011 01:24 Igor
Rozbalit Rozbalit vše Re: C# Uložení BindingListu do souboru
super, už to jede. Ještě jednou díky.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.