Laden...

[DesignTime] Configfile im OnLoad wird nicht gefunden

Erstellt von AlexWerz vor 13 Jahren Letzter Beitrag vor 13 Jahren 2.741 Views
A
AlexWerz Themenstarter:in
4 Beiträge seit 2010
vor 13 Jahren
[DesignTime] Configfile im OnLoad wird nicht gefunden

Hallo Forum!

Ich stehe vor einem Problem, dass ich nicht lösen kann. Ich habe ein UserControl erstellt. Dieses Control hat ein DataGrid welches im OnLoad gefüllt wird. Dabei wird eine Datenbankabfrage gemacht. Die Einstellungen liegen in einer zum Projekt gehörenden XML-Datei.

Wenn ich dieses Control auf das Hauptformular lege bekomme ich eine FileNotFound-Exception. Er findet die Konfigurationsdatei nicht. Der Dateiname ist relativ angegeben. Lasse ich das Projekt laufen ist alles wunderbar und funktioniert. Nur im Design-Modus klappt es nicht, weil er an der falschen Stelle sucht.

Kann man das irgendwie umgehen?

Gruß
Alex

3.430 Beiträge seit 2007
vor 13 Jahren

Hallo AlexWerz,

dann hast du deine XML-Datei vermutlich falsch platziert 😉
Nein im Ernst.. wieso willst du überhaupt im Designmodus die Konfigurationsdatei auslesen und die Daten von der DB laden?
Mich persönlich nervt es wenn da schon im Designer das halbe Programm läuft.

PS: Die manuelle Arbeit mit der XML Datei kann man sich sparen das es in .NET schon das Konfigurationsmodell gibt welches dir die ganze Arbeit abnimmt.
Guckst du hier: [Tutorial] Das neue Konfigurationsmodell im .NET Framework 2.0
Die Datei wird automatisch irgendwo gespeichert, und da hat man dann keine Zugriffsprobleme

Gruss
Michael

A
AlexWerz Themenstarter:in
4 Beiträge seit 2010
vor 13 Jahren

Also eigentlich will ich die Daten der Datenbank zur Design-Time garnicht sehen. Das Problem ist folgendes:

Auf der Hauptseite wird das Frame (das UserControl) eingebunden. Im UserControl wird im OnLoad die Datenbank angesprochen um das DataGrid zu füllen. Dazu wird der ConnectionString aus der XML gelesen. Dieser Event wird jedoch auch zur DesignTime angesprochen.

Wenn du also eine bessere Lösung hast, immer her mit 😃

Gruß
Alex

3.430 Beiträge seit 2007
vor 13 Jahren

Hallo,

du kannst in deinem Code einfach abprüfen ob es Design-Mode oder Runtime ist.

Also so etwas müsste dein Problem lösen


if (Designer.IsInDesignMode)
    return;

Gruss
Michael

1.552 Beiträge seit 2010
vor 13 Jahren

Hallo michlG,

Designer.IsInDesignMode gibst unter WPF nicht, dort heisst es
DesignerProperties.GetIsInDesignMode(this)

Gruß
Michael

Mein Blog
Meine WPF-Druckbibliothek: auf Wordpress, myCSharp

A
AlexWerz Themenstarter:in
4 Beiträge seit 2010
vor 13 Jahren

Danke! Das ist was ich gesucht habe. Ich versuch es heute abend gleich mal.

Gruß
Alex

A
AlexWerz Themenstarter:in
4 Beiträge seit 2010
vor 13 Jahren

Ich habe meinen Fehler gefunden! Ich habe eine statische Klasse Database. Dort werden alle Datenbankrelevanten Dinge gesteuert. Dort gibt es eine Klassenvariable connectionString, der durch einen Methodenaufruf gefüllt wird:


    static class Database
    {
        private static string connectionString = Configuration.getValue("ConnectionString");
    ....
    }

Jetzt habe ich es etwas umgebaut:


    static class Database
    {
        private static string connectionString;

        private static string getConnectionString()
        {
            if (connectionString == null)
            {
                 connectionString = Configuration.getValue("ConnectionString");
            }
            return connectionString;
        }
    ...
    }

So funktioniert es, da Configuration.getValue(...) nur zur Laufzeit aufgerufen wird.

Gruß
Alex

1.552 Beiträge seit 2010
vor 13 Jahren

Hallo AlexWerz,

So funktioniert es, da Configuration.getValue(...) nur zur Laufzeit aufgerufen wird.

Du meinst Database.getConnectionString() wird nur zur Laufzeit aufgerufen, da du kontrollierst dass es nur dann aufgerufen wird, denn genau genommen wird Configuration.getValue() nur 1 mal aufgerufen und das sobald der connectionString == null ist und dann ist es ihm egal ob er in der Laufzeit ist oder nicht. 😁

Gruß
Michael

Mein Blog
Meine WPF-Druckbibliothek: auf Wordpress, myCSharp

3.430 Beiträge seit 2007
vor 13 Jahren

Hallo,

Designer.IsInDesignMode gibst unter WPF nicht, dort heisst es
DesignerProperties.GetIsInDesignMode(this)

Stimmt, danke für die Richtigstellung.

Ich habe eine MVVM - Library verwendet und da gibt es dieses Designer.IsInDesignMode 😃

Grüsse

6.862 Beiträge seit 2003
vor 13 Jahren

DesignerProperties ist natürlich der richtige Klassenname, aber das Property heißt trotzdem IsInDesignMode. Das war schon richtig. Es ist nur ein attached Property und daher ist die entsprechende statische Get Methode nur eine Möglichkeit dieses abzufragen.

Baka wa shinanakya naoranai.

Mein XING Profil.