Editace hodnot u app.config   zodpovězená otázka

VB.NET

Dobrý den,

asi nejdříve bych popsal, co je mým cílem. Rád bych si vytvořil konfigurační soubor. Nechci již používat INI soubory a rád bych to udělal ve formě XML souboru.

Načtení hodnot zvládám bez problému, ale mám problém s editací jednotlivých hodnot. Nevíte jak se to dá řešit? Hledám už 2 dny na internetu a experimentuju a nich se mi nedaří rozchodit. A ChilkatDotNet.dll se mi nechce používat díky licenci.

Přidávám ještě kód:

app.config

----------------------

<?xml version="1.0" encoding="utf-8" ?>

<configuration>

<appSettings>

<add key="Predvolba" value="+420 "/>

</appSettings>

</configuration>

Kód programu:


'Importování kolekce pro práci s XML souborem
Imports System.Xml
'Importování kolekce pro práci s konfiguračním souborem
Imports System.Configuration

  'Zjištění hdonot z konfiguračního souboru
    Dim config As Configuration.ConfigurationSettings
    Dim strStat As String = config.AppSettings("stat")
    Dim strPredvolba As String = config.AppSettings("predvolba")

... a dál jsou desítky pokusů na update hdonot, které nejedou. Mějme např. <add key="Predvolba" value="+420 "/> a na formuláři textové pole txtPredvolba. Po kliknutí na cmdSave se mi provede, že se změní hodnota <add key="Predvolba" value="+420 "/> na hodnotu <add key="Predvolba" value="Moje nová hodnota předaná z txtPredvolba "/>

Doufám že Vás tím moc neotravuji, ale už vůbec nevím, jak se pohnout dále.

PSko: Neuvažujete nad nějakým seriálem o XML?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pokud máte Visual Studio 2002 nebo 2003, třída ConfigurationSettings zápis nastavení neumožňuje. Nejjednodušší je použít vlastní XML řešení. Vytvořte si soubor config.xml a nastavení v něm ukládejte takto:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <stat>Česká republika</stat>
  <predvolba>Praha</predvolba>
</configuration>

S nastavením pak můžete jednoduše manipulovat použitím těchto funkcí:

    Dim settings As System.Xml.XmlDocument

    'načtení nastavení
    Public Sub LoadSettings()
        settings.Load("config.xml")
    End Sub

    'zjištění hodnoty nastavení
    Public Function GetSettings(ByVal key As String) As String
        Return settings.SelectSingleNode("/configuration/" & key).InnerText
    End Function

    'zapsání hodnoty nastavení
    Public Sub SetSettings(ByVal key As String, ByVal value As String)
        settings.SelectSingleNode("/configuration/" & key).InnerText = value
    End Sub

    'uložení nastavení
    Public Sub SaveSettings()
        settings.Save("config.xml")
    End Sub

Na začátku programu musíte zavolat LoadSettings, což načte nastavení ze souboru config.xml. Pro uložení zavolejte SaveSettings. Zjistit hodnotu pro nějaké nastavení můžete přes GetSettings("predvolba") a nastavit přes SetSettings("predvolba", "+380"). To je vše.

Pokud máte Visual Studio 2005 nebo Visual Basic 2005 Express Edition, existuje jednodušší řešení. V okénku se soubory projektu poklepejte na My Project a na záložce Settings si na každý řádek nadefinujte nastavení - název a datový typ. Po dokončení projekt uložte. Předpokládejme, že si třeba vytvoříte nastavení mesto a hodnota je New York.

    'načíst hodnotu
    Dim mesto As String = My.Settings.mesto
    'nastavit hodnotu
    My.Settings.mesto = "Los Angeles"
    'po nastavení hodnoty uložit
    My.Settings.Save()

Výhoda tohoto systému je také ta, že můžete některá nastavení označit jako aplikační (změny se projeví u všech uživatelů) anebo uživatelské (pro každého uživatele může mít jinou hodnotu).

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Děkuji Vám moc za vyčerpávající odpověď. Nikde jsem ji nedokázal najít. Pokud Vám to nebude vadit, odkud čerpáte následující úplné informace a ještě k topmu v češtině?

Protože mám VS2005 a VB.NET Express Edition, zkusil jsem Váš druhý způsob. Pracuje se s ním opravdu lehce. Ovšem jsem se zarazil na způsobu ukládání, ale po chvilce doumání jsem to našel na MSDN.

Jen abych upřesnil úplnou Vaši odpověď, kdyby to někdo hledal a potřeboval:

Scope indicates if the property is read-only. If the value is Application, the property is read-only; if the value is User, the property is read-write.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Nemáte zač. Problém .NET frameworku je ten, že se jedná o velice rozsáhlou sadu funkcí. Je pečlivě zdokumentována anglicky, v dokumentaci jsem vždy nalezl vše, co jsem potřeboval. Je toho ovšem tolik, že to stejně nikdo překládat nebude. Tento server vzniknul hlavně proto, aby se alespoň základní informace pro začátečníky objevily někde v češtině. O nejpoužívanějších a zajímavých věcech se snažíme psát na tomto serveru, časem toho zde bude samozřejmě víc, server je poměrně nový. V češtině je informací opravdu dost poskromnu, ale většina programátorů stejně umí (nebo by měla umět) anglicky alespoň tak, aby technickou dokumentaci byli schopni přečíst. Bez angličtiny se programátor neobejde.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
'načíst hodnotu
    Dim mesto As String = My.Settings.mesto
    'nastavit hodnotu
    My.Settings.mesto = "Los Angeles"
    'po nastavení hodnoty uložit
    My.Settings.Save()

Zdravím, v .net 2005 a 2008 je to opravdu jednoduché, akorát než mě došlo, že se to nastavení nepřepisuje v hlavním okně, kde to definuji, ale v configuračním souboru v data aplikací, tak jsem nad tím strávil dost času.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

pls mužeš mi dat icq .,, potřebuju se na něco zeptat

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback