Laden...
Avatar #avatar-2561.jpg
dr_d00m myCSharp.de - Member
Dipl.-Ing. (FH) für Informationstechnik Sauerland Dabei seit 27.02.2008 43 Beiträge
Benutzerbeschreibung

Forenbeiträge von dr_d00m Ingesamt 43 Beiträge

07.05.2009 - 10:02 Uhr

Hallo,
Vorschlag 1: Ersetz mal den addScriptTags-Parameter (aktuell false) durch true.
Vorschlag 2: Falls du einen ScriptManager und ein UpdatePanel auf deiner Seite hast solltest du ScriptManager.RegisterStartupScript nutzen.

Gruß
dr_d00m

27.04.2009 - 16:25 Uhr

Ok, dann halt nicht. Trotzdem danke...

Gruß

dr_d00m

27.04.2009 - 16:05 Uhr

Hallo Peter,

Wieso muss es eine Seite sein?

Naja, also die Situation ist folgende: die Eingabemasken, die genutzt werden sollen sind alte Delphi-Masken, die mittels eines Tools (das schon existiert) in aspx-Dateien konvertiert werden. Diese aspx-Dateien sollen nun innerhalb des wizards angezeigt werden. Es wär natürlich möglich den Code per Copy-and Paste einfache von einer konvertierten Datei in den wizard zu packen.
Ich dachte nur, dass das Eindocken evtl eleganter dafür wäre. Aber wenn ich erst parsen muss...

27.04.2009 - 14:59 Uhr

Hallo zusammen,
ich hab da eine etwas ungewöhnliche Frage. Ich stelle gerade für ein Projekt Anforderungen zusammen und dabei bin ich auf eine realtiv schwierige Frage gestoßen.
Wir wollen für verschiedene Kunden in einer Seite eines ASP.NET Wizard Controls verschiedenen Content in Form von ASPX-Seiten einbinden. Quasi so ähnlich wie mit einem IFrame. Das wär ja auch ne Möglichkeit, darf ich aber nicht benutzen...versteht sich 😉
Nun ja, darum meine Frage: Ist es irgendwie möglich eine ASPX-Seite in eine andere einzubetten?

Gruß und danke schonmal

dr_d00m

02.04.2009 - 14:59 Uhr

Tja, schade nur, dass man immernoch kein ASP.NET debuggen kann. Aber das wird wohl auch noch kommen...

14.01.2009 - 15:41 Uhr

Hallo,
also meiner Einschätzung nach dürfte das möglich sein. Ich setze jetzt mal voraus, dass du mit ASP.NET arbeitest. Dabei sind ASPX-Seite ja nichts weiter als Textdateien. Also kannst du sie so füllen wie du gern möchtest.
Um dann eine ordntliche Codebasis zu haben, kannst du ja allen "on-the-fly" erstellten Seite die gleiche Code-Behind-Datei geben. Da du, wie du sagest, nur eine RadioButtonList, eine CheckBoxList und einen Button brauchst, sollte das auch noch überschaubar bleiben. Du musst nur darauf achten, dass alle deine Webseiten einheitlich dieselben Namen für die Steuerelemente verwenden.
Ich hoffe die Anregung hat geholfen.
Gruß

dr_d00m

18.12.2008 - 13:26 Uhr

Hallo,
ohne jetzt nochmal die Diskussion um serverseitigen und clientseitigen Code lostreten zu wollen, aber über diese Thematik solltest du Bescheid wissen bevor du folgendes benutzt:


Page.ClientScript.RegisterStartupScript(typeof(Page), "Back", "history.back();", true);

oder alternativ falls du einen ScriptManager einsetzt:


ScriptManager.RegisterStartupScript(this, typeof(Page), "Back", "history.back();", true);

Gruß
dr_d00m

02.10.2008 - 10:29 Uhr

Das ist echt zum verzweifeln. Ich hab ein Javascript, das mir alle z-Indexe auf -1 setzt außer das des umschließenden Div meines Kalenders und trotzdem erscheint er noch hinter der TextBox...
Hier mal der Code zum JavaScript:


function setAllZIndexesLow(cal) {
    var elementsInForm = document.getElementById(theForm.id).elements;
    
    var dtpDiv = document.getElementById(cal + "_1");

    for (var i = 0; i < elementsInForm.length; i++) {
        if (elementsInForm[i] != dtpDiv) {
            elementsInForm[i].style.zIndex = -1;
        }
    }
}

Die Funktion wird ausgeführt beim OnClientClick des Buttons. OnClientShowing vom Kalender hat irgendwie nicht so recht funktioniert. Das Property OnClientClick setze ich im CodeBehind, damit ich die ID des Divs finden kann (fehlt nur noch "_1"). Damit kan ich dann das umschließende Div rauslassen.

Bei OnClientHiding des Kalenders wird folgende Funktion ausgeführt:


function setAllZIndexesAuto() {
    var elementsInForm = document.getElementById(theForm.id).elements;
    for (var i = 0; i < elementsInForm.length; i++) {
        elementsInForm[i].style.zIndex = "auto";
    } 
}

Beim debuggen (mit Visual Studio) sehe ich auch, dass alle Elemente anscheinend den z-Index -1 haben. Schau ich mir die Elemente hinterher mit der IE Developer Toolbar an, ist ihr z-Index allerdings nicht gesetzt.

Wo ist der Fehler? Ich bin grad echt am verzweifeln...

Gruß
dr_d00m

02.10.2008 - 08:30 Uhr

Jo, danke für die Antwort. Genau das hab ich gestern abend auch noch probiert. Das funktioniert tatsächlich. Leider wird die Seite von einem selbst gebauten Programm erzeugt und daher ist es nicht so einfach die z-Indexe aller Elemente unter einem Kalender auf -1 zu setzen. Ich werd jetzt ein Javascript schreiben, dass mir beim eintreten von OnClientShowing des Kalenders den z-Index aller Elemente auf -1 setzt und bei OnClientHiding wieder auf auto.
Wenns fertig ist lass ich mal verlauten, ob es geklappt hat...

Gruß
dr_d00m

01.10.2008 - 13:58 Uhr

Hallo,
ich habe folgendes Problem im Internet Explorer:
Ich benutze eine TextBox und einen ImageButton in Verbindung mit einem CalenderExtender, um einen Date-Time-Picker zu implementieren.
Unter diesem Konstrukt liegt eine TextBox. Die ist per CSS mit einer festen Position (position: absolute😉 versehen.
Jedes Mal wenn ich nun meinen Kalender aufrufe, wird dieser unter der TextBox gerendert. Leider ist es in meinem Fall auch nicht möglich das position: absolute irgendwie zu ersetzen.
der Code dazu sieht wie folgt aus:


<div ID="L_TVDATUM_1" style="position:absolute; top:776px; left:24px; width:121px; height:21px;">
        <table>
        <tr>
            <td>
                <asp:TextBox ID="tbDateTime" runat="server" Height="18" Width="128" 
                    AutoPostBack="false" ontextchanged="tbDateTime_TextChanged"></asp:TextBox>
            </td>
            <td>
                <asp:ImageButton ID="ibCalendar" runat="server" ImageUrl="~/img/calendar.png" Height="22px" />
            </td>
        </tr>
    </table>
<cc1:CalendarExtender ID="tbDateTime_CalendarExtender" runat="server" Enabled="True"
                TargetControlID="tbDateTime" PopupButtonID="ibCalendar" Format="dd.MM.yyyy"  >
            </cc1:CalendarExtender>
      </div>
<div ID="KOSTENSTELLE_1" style="position: absolute; top:856px; left:24px; width:289px; height:21px;">
        <asp:TextBox ID="KOSTENSTELLE" CssClass="Eingabefeld" style="width:289px; background-color:#FF0000;" runat="server" />
      </div>

Ich habe auch verschiedene Lösungen zu dem Problem gefunden:
http://forums.asp.net/t/1071605.aspx
http://forums.asp.net/t/1067281.aspx

Die habe ich in den letzten 1 1/2 Tagen auch kräftig durch probiert. Für den Firefox war das alles kein Problem. Der hat jede Lösung akzeptiert und alles funktioniert. Der Internet Explorer(7) war da leider nicht ganz so freundlich 😉

Kann mir hier vielleicht jemand mit dem Problem weiterhelfen?

Gruß
dr_d00m

22.09.2008 - 11:40 Uhr

Hallo zusammen,
ich habe folgendes Problem mit dem Internet Explorer:
Ich nutze ein ASP.NET TreeView Control um einen Baum von Elementen darzustellen, die mit einem Gantt Chart synchron angezeigt werden sollen. Das heißt zu jedem im Baum vorhanden Element wird auch im Chart eine Zeile angezeigt.
Um nun beides (Element im Baum und Zeile) auf derselben Höhe zu halten, habe ich den <tr>-Tags (weil ja so ein Baum auch nur verschiedene Tabellen sind) über CSS die Höhe 30px zugewiesen. Das angezeigte Chart berechnet nun mit dieser Höhe und der Anzahl der Baumelemente seine eigne Höhe.
Soweit so gut. Im Firefox alles kein Problem das Teil rennt. Nur der Internet Explorer macht Probleme. Hier wird immer unter dem ersten Kindelement eines Knotens ein Abstand von ca. 1px angezeigt.
Zur Verdeutlichung habe ich mal so einen Baum als Dateianhnag hinzugefügt. Gut, ich hätte zum einfärben auch ne schönere Fareb nehmen können, aber es verdeutlicht den Zusammenhang 😉
Ich habe auch schon einige Sachen versucht, wie z.B. im ASPX-Code die Höhe für die einzelnen Knoten einzustellen.

<NodeStyle Font-Names="Verdana" Font-Size="8pt" ForeColor="Black" 
                                            BorderStyle="None" BorderWidth="0px" 
                                         NodeSpacing="0px" VerticalPadding="0px" HorizontalPadding="0px"/>

Hat allerdings auch nichts gebracht. Ich hab auch über CSS versucht Padding, Margin und Border (für table, tr und td, sowie das übergeordnete div) auf 0 zu setzen. Auch das bringt nichts.
Die Knoten im Baum werden alle dynamisch erstellt. Außerdem werden sie erst geladen, wenn ihr jeweiliger Vaterknoten geöffnet wird. Dafür wird ihr PopulateOnDemand Attribut auf true gesetzt und das Event TreeNodeExpanded genutzt. Nur der erste Knoten wird schon beim Page_load geladen.
Ist jemandem schonmal so ein Verhalten untergekommen?

Ich wäre dankbar für jede Hilfe.
Gruß,

dr_d00m

29.08.2008 - 08:22 Uhr

Hallo.
Ich hab jetzt einen anderen Weg gefunden. Ich habe den einzelnen TreeNodes über CSS feste Höhen zugewiesen und kann so die Höhe des Charts bestimmen. Ich gehe dazu alle die Nodes rekursiv durch und addiere für jede Node dessen "Expanded"-Eigenschaft true ist die feste Höhe hinzu. Fertig 😉

Vielleicht kanns ja mal irgendwer gebrauchen...

28.08.2008 - 09:31 Uhr

Hallo zusammen!
Ich hab folgendes Problem: Ich benutze ein WebControl namens ChartDirector, welches mir Images auf meiner Webseite erstellt, die Charts nach bestimmten Kriterien darstellen. Der Charttyp den ich hier benutze ist ein Gantt-Cahrt um Termine darzustellen.
Nun befindet sich auf der Seite auch noch ein TreeView. Dieses bestimmt, welche Daten im ChartDirector angezeigt werden, da jedem Objekt im Baum auch Termine zugeordnet werden können. Und zwar soll der ChartDirector für jeden angezeigten Knoten im Baum auch eine Zeile im Gantt-Chart anzeigen.
Soweit die Ausgangssituation. Nun habe ich folgendes Problem: Der Baum wird natürlich mit jedem geöffneten Knoten größer. Um dem User die Übersicht zu vereinfachen möchte ich das Image des Gantt-Chart nun an die Größe des des TreeView anpassen. Dazu habe ich mir eine JavaScript Funktion geschrieben, die ein hidden Input setzt, welches ich mit runat="server" betreibe und so serverseitig abrufen kann.
Hier mal die JavaScript Funktion:


function setTreeSizeInput() {
        var treeId = getTreeId();
        var tree = document.getElementById(treeId);

        var hiddenInputId = getTreeSizeInputId();
        var hiddenInput = document.getElementById(hiddenInputId);
        hiddenInput.value = tree.offsetHeight;        
    }

Die Funktionen getTreeId() und getTreeSizeInputId() sind Funktionen, die ich mir im Code-Behind definiert habe und die mir die ClientIds der einzelnen Server-Controls zurückgeben.


Page.ClientScript.RegisterStartupScript(this.GetType(), "TreeIdScript", 
                "function getTreeId(){return \"" + this.treeViewScheduler.ClientID + "\";}" + 
                "function getTreeSizeInputId(){return \"" + this.TreeSize.ClientID + "\";}", 
                true);
            Page.ClientScript.RegisterStartupScript(this.GetType(), "startSizeScript", "", true);

Will ich nun im Code-Behind auf die Größe des Baumes zurgreifen, brauche ich nur den value von TreeSize abfragen. Soweit die Theorie.
Ich benutze das TreeNodeExpanded Event des TreeView, um meinen Chart zu aktualisieren. Leider ist zu diesem Zeitpunkt mein hidden input noch nicht aktualisiert und somit wird mir immer die Größe beim letzten Durchlauf angezeigt.
Kennt jemand einen Weg, um diesen Fehler zuumschiffen?

Mein zweites Problem ist, dass ich kein Pendant zum TreeNodeExpanded Event auf Javascript Seite habe. Heißt ich kann die Funktion nicht immer dann aufrufen, wenn mein TreeNode sich ändert. Ich habs hier schon mit window.onload und window.onchange versucht, aber in beiden Fällen wird die Funktion nur im Fall des ersten Ladens aufgerufen. Weiß jemnad auch hierfür eine Lösung?

Danke schonmal vorab und Gruß

dr_d00m

11.08.2008 - 14:26 Uhr

OK, dann fang ich mal am besten ganz vorn an...
Also im Grunde brauche ich ein Control, dass mir verschiedene Spalten anzeigt und diese per CheckBox auswählbar macht. Zuerst hab ich es mit einem GridView versucht, in dessen ersten Spalte sich CheckBox-Controls befinden. Das funktionierte soweit auch ganz gut...dachte ich.
Dann bin ich auf ein zeimlich seltsames Problem gestoßen, dass ich hier gepostet habe:
http://www.aspnetzone.de/forums/thread/200014.aspx
Leider hab ich weder in dem Post noch unter Google oder sonstwo eine Antwort gefunden. Allerdings musste ich feststellen, dass das beschreibene Verhalten nur unter .Net aber nicht unter Mono (für das die Anwendung unter anderem auch sein soll) auftritt.
Nunja, da sich das so nicht implementieren ließ, hab ich angefangen mir ein eigenes Control zu schreiben, dass mir eine Tabelle mit Checkboxen darstellt.
Im Grunde lese ich dazu aus einem DataView die Werte aus und lasse sie von meinem Control darstellen.


for (int i = 0; i < DataSource.Table.Rows.Count; i++)
            {
                TableRow tableRow = new TableRow();
                table.Rows.Add(tableRow);
                CheckBox cb = new CheckBox();        
                
                TableCell tableCell = new TableCell();
                tableCell.Controls.Add(cb);
                tableRow.Cells.Add(tableCell);

                foreach (DataColumn column in DataSource.Table.Columns)
                {
                    // Some Columns are excepted from the view
                    if (!column.ColumnName.Contains("ID") && column.ColumnName != "E_COUNT")
                    {
                        TableCell cell = new TableCell();
                        cell.Text = Convert.ToString(DataSource.Table.Rows[i][column]);
                        tableRow.Cells.Add(cell);
                    }
                }
            }

Die table wird dann per Controls.Add(table) zum Control hinzugefügt gerendert etc.
Soweit funktioniert das auch, was die Darstellung angeht.

Per Javascript wird auf dem Client beim Click auf eine CheckBox ein hidden Field mit Werten (genau genommen ist es ein String mit kommaseparierten Werten) gefüllt, die die angeklickten CheckBoxen enthalten. Das funktioniert auch.

Setzen des Hidden Field innerhalb des Custom Controls:


Page.ClientScript.RegisterHiddenField(ID, "");  

Da das hidden Field die selbe ID hat wie mein Custom Control, sollte eigentlich beim PostBack die Funktion


LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection)

aufgerufen werden. Dies funktioniert allerdings nur auf ASPX-Seiten und nicht in einem UserControl. Ich hab das mit dem Debugger überprüft. Bei der Implementierung in einem User Control wurde der Haltepunkte nicht angesprungen, auf einer einfachen ASPX-Seite schon.

Zum Aufbau meines UserControls:
Da ich das Custom Control nur als Ersatz für meine GridView-Version geschrieben habe, ist noch weitere Funktionalität in einem UserControl gekapselt. Hier habe ich ein Panel mit der Auswahltabelle, einem OK-Button und einem Cancel-Button. Das ganze wird per ModalPopUpExtender ein, bzw. ausgeblendet. Dazu existiert außerhalb des Panels noch ein leerer LinkButton, an den der ModalPopUpExtender gehangen ist.


<div id="pick_list">
    <asp:LinkButton ID="LinkButton1" runat="server"></asp:LinkButton>
    <asp:Panel ID="PickListPanel" runat="server" BorderColor="Black" BorderStyle="Solid"
        Height="512" BackColor="#E1F0FF">
        <div id="heading">
            <asp:Label ID="headingPickList" runat="server" Text="Bitte wählen:"></asp:Label>
        </div>
        <div id="pick_grid">
            
            <cc2:DataViewRowSelector ID="DataViewRowSelector1" runat="server" />            
        </div>
        <div id="buttons">><asp:Button ID="SubmitButton" CssClass="button" runat="server" Text="OK" OnClick="SubmitButton_Click" />
            <asp:Button ID="CancelButton" CssClass="button" runat="server" Text="Abbrechen" OnClick="CancelButton_Click" />
        </div>
    </asp:Panel>
    <cc1:ModalPopupExtender ID="LinkButton1_ModalPopupExtender" runat="server" DynamicServicePath=""
        Enabled="True" TargetControlID="LinkButton1" PopupControlID="PickListPanel" Drag="true"
        DropShadow="true" BackgroundCssClass="watermarked">
    </cc1:ModalPopupExtender>
</div>

Desweiteren konnte ich feststellen, dass innerhalb der Button_Click Methode, die ControlCollection meines Custom Controls null (wie auch alle anderen Properties) wird. Somit krieg ich auch keine serverseitige Abfrage hin.

So, ich hoffe ich hab das Problem einigermaßen dargelegt und nichts vergessen. Ich bin grad an einem Punkt an dem ich den Wald vor lauter Bäumen nicht sehe und deshalb auch vielleicht kleinere Fehler nicht mehr erkenne, darum danke schonmal für die Hilfe.

Gruß
dr_d00m

11.08.2008 - 11:35 Uhr

Hallo Peter, hallo squadwuschel,
wie ihr ja beide vorgeschlagen habt, habe ich versucht die CHeckBoxen serverseitig abzufragen. Leider ist das auch nicht wirklich gelungen. Sobald ich nämlich durch meinen Button auf der Seite einen PostBack auslöse und im Button_Click die Checkboxen auswerten will, scheint die komplette ControlCollection meines Custom Controls leer zu sein.

Irgendwie steh ich da grad auf dem Schlauch.

08.08.2008 - 15:23 Uhr

Hallo,
ich habe ein Problem mit einem Benutzersteuerelement. Und zwar habe ich mir ein Custom Control geschrieben, in dem ich per CheckBox Daten auswählen kann. Dieses habe ich in ein Panel gesteckt zusammen mit 2 Buttons, einen für OK und einen für abbrechen. Beim drücken auf OK wird ein weiteres Event ausgelöst, dass in den EventArgs die geklickten CheckBoxen übergibt. Leider habe ich schon in der Behandlungsmethode für den Button keinerlei zugriff mehr auf die Werte aus meinem Custom Control.

Die Übergabe der Werte aus dem Custom Control erfolgt so:
zuerst werden die geclickten CheckBoxen auf dem Client in ein hidden Input zwischengespeichert. Dieser wird dann beim PostBack ausgelesen mithilfe des der Implementierung des IPostBackHandler interfaces.
Das ganze Schema ist hier zu finden:
http://msdn.microsoft.com/en-us/library/aa479050.aspx#ccc-postback_topic5

Kurz: Wenn das hidden Input genau so heißt wie die Id des Custom Controls wird die Methode LoadPostData beim PostBack aufgerufen.

Leider passiert dies nicht wenn ich das Custom Control in ein User Control stecke. Derselbe Code innerhalb einer ASPX-Seite funktioniert einwandfrei.

Hat jemand schonmal was in die Richtung gemacht oder kann mir nen Hinweis in die richtige Richtung geben?

Danke schonmal und Gruß,

dr_d00m

29.07.2008 - 16:59 Uhr

Danke, das waren genau die richtigen Tipps.
Ich beziehe jetzt die IDs dynamisch über <control>.ClientId und es läuft. Außerdem muss ich sagen, dass ich von firebug extrem begeistert bin.

Danke nochmal und Gruß

dr_d00m

28.07.2008 - 16:10 Uhr

Hallo Leute,
ich habe ein Panel, welches ich per ModalPopupExtender anzeigen kann. In diesem Panel befindet sich ein GridView, welches ich dynamisch mit Daten fülle. Dazu gehört auch, dass die Spalten dynamisch erzeugt werden. Das bedeutet, dass ich so zwischen einer und 12 Spalten haben kann. Dadurch ändert sich natürlich auch die Breite des Panels, da ich style="width:auto;" eingestellt habe. Das Panel ragt dann (zumindest bei 1024x768 ) über den Bildschirmrand hinaus.
Nun möchte ich auch keine feste Größe einstellen, da das mit nur einer Spalte einigermaßen bescheiden aussieht.
Mein Ansatz war nun folgender: Ich möchte, falls das Panel größer als 950px wird, die Größe des Divs in dem das Panel liegt oder des Panels selbst auf 950px setzen.
Vermutlich ist hier Javascript angesagt.
Ich hab das auch mit folgendem Code ausprobiert:


            string clientScript =
                "<script type=\"text/javascript\">" +
                "if(document.getElementById('pick_list').offsetWidth>950)" +
                "{" +
                    "document.getElementById('pick_list').style.width=90+\"%\";" +
                "}" +
                "</script>";

            ClientScript.RegisterStartupScript(GetType(), "", clientScript);

Leider komme ich damit nicht weit. Das Panel behält seine Größe, was ich auch mache.
Ich weis auch grad nicht mehr weiter.
Kennt jemand vielleicht eine Lösung für das Problem oder hat einen guten Ansatz?

Mfg
dr_d00m

18.07.2008 - 08:14 Uhr

Hallo Peter,
Tja, leider handelt es sich schon benutzerspezifische Daten. Meine Cache-Variante funktioniert erstmal ganz gut und ich werd es wohl vorerst dabei belassen.

Auf jeden Fall mal Danke für die ausdauernde Hilfe 😉

Gruß,
dr_d00m

17.07.2008 - 08:11 Uhr

Servus. Also auf das Paging im GridView könnte ich mich einlassen. Auf ASP.NET 3.5 kann ich leider nicht zurückgreifen, da alles unter Mono laufen soll. Da gibt es bekanntlich nur ASP.NET 2.0.
Da ich die Properties aber auf jeden Fall brauche, möchte ich nochmal auf mein eigentliches Problem zurückkommen. Ich hab sie im Moment im Cache des Servers abgelegt.
Ist ok für meine Listen von 100 Objekten oder gibts da noch was besseres?

16.07.2008 - 17:12 Uhr

Nicht schlecht geschlussfolgert 😉
Es geht im Prinzip darum, dass ich mir einen eigenen Pager baue. Der soll nur ein wenig performanter sein, als der im GridView. Außerdem brauche ich das diese Properties, um eine dynamische Größenanpassung des GridViews machen zu können...

Gruß

dr_d00m

16.07.2008 - 08:01 Uhr

Hallo Ben.
Also die ganze Geschichte sieht folgendermaßen aus:
Ich habe links ein TreeView Element und rechts das GridView.
Wähle ich auf dem TreeView ein ein neues Element aus wird das GridView mit neuen Daten gefüllt. Dazu setze ich die DataSource des GridView auf eine Liste mit Business Objects. Diese Liste möchte ich in einer Property speichern, um auf die eigentlichen Business Objects zugreifen zu können. Das GridView zeigt nämlich nur eine Teilmenge der properties der Business Objects an.

So ich hoffe das veranschaulicht den zusammenhang ein wenig.

Gruß

dr_d00m

15.07.2008 - 08:45 Uhr

Hallo Peter und danke für die Antwort.
Ich hab mich grad ein wenig mit ViewState auseinandergesetzt und gelesen, dass diese Art der Datenspeicherung mehr für kleine Datenmengen gedacht ist. Bei handelt es sich allerdings in einem Fall um eine Liste mit Business Objects. Die kann dann leicht einen Umfang von 100-200 Elementen erreichen.
Ist ViewState auch dafür noch zu gebrauchen oder gibt es dafür eine bessere Möglichkeit der Speicherung?

Gruß

dr_d00m

14.07.2008 - 17:26 Uhr

Hallo Leute,
ich habe ein UserControl in dem ich mehere Properties definiere. Diese werden auch beim ersten Laden der Seite richtig geladen. Sobald ich aber nun ein Postback durchführe (heißt in meinem Fall ein Grid wird neu geladen) Sind meine benötigten Properties wieder null. Allerdings muss ich die Werte der Properties weiter verarbeiten.

Gibt es also eine Möglichkeit den Stand der Properties irgendwie zu retten?

Danke schonmal für jede Art von Hilfe.

Gruß,

dr_d00m

03.07.2008 - 13:38 Uhr

Danke,
habs hinbekommen:


<asp:TemplateField HeaderText="Bezeichnung" >
                            <ItemTemplate>
                                <asp:Image ID="TestImage" ImageUrl='<%# GetImagePath(Convert.ToInt32(Eval("TestId"))) %>' runat="server" />
                                <asp:Label ID="Bezeichnung" Text='<%# Eval("TestName") %>' runat="server" />
                            </ItemTemplate>
                        </asp:TemplateField>

Dabei wird mit GetImagePath der Pfad dynamisch zur Id geholt.

Vielleicht hilfts ja mal irgendwem 😉

Gruß
dr_d00m

03.07.2008 - 11:49 Uhr

Hallo Leute,
ich möchte in meinem GridView, das (bis jetzt) nur aus BoundFields besteht im ersten Feld jeweils ein Image vor den Names setzen.
Das Image soll dynamisch sein, d.h. es soll nicht immer dasselbe sein. Es soll sich aus dem Inhalt des Feldes + Dateiendung zusammensetzen.

Gibt es dazu eine einfache Möglichkeit?

Ich hatte schon drüber nachgedacht daneben noch eine Spalte als ImageField einzufügen. Aber das finde ich etwas unschön...

Schonmal Danke im Voraus.

Gruß
dr_d00m

20.06.2008 - 11:27 Uhr

Hallo Peter und Danke für die ausführliche Antwort.
Zu deiner Frage die Klasse hält eine Art Definitionsstruktur für die Datenbank, so dass bestimmte Datenbanktabellen dynamisch angesprochen werden können. Das heißt im Grunde werden hier die Tabellen und ihre Felder hinterlegt, die später angesprochen werden sollen.
Naja, das ganze muss nur einmal geladen werden, da es unveränderlich ist.

Auf jeden Fall werde ich mir die verschiedenen Möglichkeiten mal ansehen.

Gruß,

dr_d00m

19.06.2008 - 16:05 Uhr

Hmm, als WebService?
Ich seh im Moment noch nicht ganz die Vorteile, die mir das bringt...

Vielleicht steh ich aber auch einfach nur auf dem Schlauch 😁

19.06.2008 - 10:02 Uhr

Hallo Leute,
ich steh grad vor einem Designproblem und wollt einfach mal ein paar Meinungen einholen.
Also ich möchte von einer selbst erstellten Klasse zu Beginn immer nur eine Instanz laden. Die Klasse ist so ziemlich unveränderlich und lädt einfach immer genutzte Daten aus der Datenbank.
Hört sich ziemlich nach Singleton an, soviel ist klar. Ich weiß aber jetzt nicht genau wo ich einen solchen Aufruf in einer ASP.NET Web-Anwendung platziere. Schreibt man das einfach in die Default.aspx? Ich möchte ja auch vermeiden, dass jeder Nutzer, der die Anwendung aufruft, jedes mal eine neue Instanz der Klasse erzeugt.

Wie geht man dort am besten vor?

Danke schonmal für die Tipps.

Gruß

dr_d00m

20.05.2008 - 13:27 Uhr

Also zunächst mal danke für die schnelle Antwort.
Das ganze soll nicht zur Laufzeit passieren. Der Ablauf gestaltet sich wie folgt:
Zuerst wird vom Entwickler ein Grundgerüst der Anwendung (Grundlegende GUI, Data Access Layer etc.) zur Verfügung gestellt.
Dann kann ein Projektverantwortlicher nach Bedarf ASPX-Seiten erstellen, die die Eingabemasken für die relevanten Daten darstellen.
Diese werden dann vor der Auslieferung an den Kunden nach Vorgaben (z.B. Namenskonvention) zum Projekt hinzugefügt.

Ich gebe zu, dass ist eine ziemlich spezielle Anforderung, aber ich dachte vielleicht gibt es ja einen vereinheitlichten Maskendesigner, der nicht so komplex wie VS ist und dem man einige Vorgaben mitgeben kann, so dass auch jemand, der nicht unbedingt Entwickler ist damit arbeiten kann. Das ganze kann natürlich auch kommerziell sein.

Gruß,

dr_d00m

20.05.2008 - 12:03 Uhr

Hallo zusammen,
ich entwickle zur Zeit eine ASP.Net Anwendung, welche über verschiedene Eingabemasken für Daten verfügen soll. Nun ist eine Anforderung an die Anwendung, dass diese Eingabemasken mit einem Tool auch von Nicht-Entwicklern nach bestimmten Vorgaben erstellt werden können. Die sollen dann einfach die vordefinerten Controls ähnlich wie im VS Designer zusammenklicken können, das ganze aber eingeschränkter.
Ich hoffe ich hab das einigermaßen verständlich erklärt 😁
Jetzt frage ich mich natürlich, ob es dafür schon irgendwelche fertigen Lösungen gibt oder ob ich das neu bauen muss. Hat jemand von euch schonmal eine solche Anforderung gehabt? Kennt vielleicht jemand ein Tool, dass sich für diesen Zweck eignet?

Besten Dank schonmal...

Gruß,

dr_d00m

20.05.2008 - 09:21 Uhr

Also ich hab für Oracle XE ganz gute Erfahrungen mit System.Data.OracleClient gemacht. Vielleicht solltest du den Provider mal austesten.

Der ConnectionString (conn.ConnectionString = "Data Source=XE;User Id=system;Password=cmaurer"😉 hat nach dem Muster bei mir immer funktioniert.

Gruß,

dr_d00m

24.04.2008 - 13:43 Uhr

Hallo zusammen,

ich bin recht neu in ASP.NET und versuch mich grad damit eine dll, die mir ein kollege gegeben hat einzubinden.

Leider wirft meine Anwendung beim Auführen eine System.Configuration.ConfigurationErrorsException mit der Fehlermeldung "Das aktuelle Konfigurationssystem unterstützt keine Einstellungen im Gültigkeitsbereich des Benutzers."

Meine Recherche hat ergeben, dass die dll wohl auf eine Konfigurationsdatei der Form app.config zugreift. Da in ASP.Net aber die web.config die Configdatei der Wahl ist, schlägt der Zugriffsversuch fehl, da die angegebenen Properties da nunmal nicht zu finden sind.

Mit


this.OID = Properties.Settings.Default.MAX_OID+1;

wrid auf das vordefinierte Property in der app.config zugegriffen.

Wie kann ich nun meine app.config Eintragungen in die web.config portieren?

Hier die vorliegende app.config:


<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
            <section name="Camera.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
            <section name="CamInterface.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
        </sectionGroup>
        <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
            <section name="Camera.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
            <section name="CamInterface.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
        </sectionGroup>
    </configSections>
    <applicationSettings>
        <HST.Camera.Properties.Settings>
            <setting name="DB_USER" serializeAs="String">
                <value>telecam</value>
            </setting>
            <setting name="DB_PASS" serializeAs="String">
                <value>masterkey</value>
            </setting>
            <setting name="DB_HOST" serializeAs="String">
                <value>localhost</value>
            </setting>
            <setting name="DB_DATABASENAME" serializeAs="String">
                <value>kanio</value>
            </setting>
            <setting name="DB_TYP" serializeAs="String">
                <value>Oracle</value>
            </setting>
            <setting name="NO_FRAME" serializeAs="String">
                <value>hello.jpg</value>
            </setting>
        </HST.Camera.Properties.Settings>
        <CamInterface.Properties.Settings>
            <setting name="DB_USER" serializeAs="String">
                <value>telecam</value>
            </setting>
            <setting name="DB_PASS" serializeAs="String">
                <value>masterkey</value>
            </setting>
            <setting name="DB_HOST" serializeAs="String">
                <value>localhost</value>
            </setting>
            <setting name="DB_DATABASENAME" serializeAs="String">
                <value>kanio</value>
            </setting>
            <setting name="DB_TYP" serializeAs="String">
                <value>Oracle</value>
            </setting>
        </CamInterface.Properties.Settings>
    </applicationSettings>
    <userSettings>
        <HST.Camera.Properties.Settings>
            <setting name="CAMCONTROL_FRAMEQUALITY" serializeAs="String">
                <value>60</value>
            </setting>
            <setting name="CAMCONTROL_FRAMERATE" serializeAs="String">
                <value>1000</value>
            </setting>
            <setting name="CAMCONTROL_FRAMEWIDTH" serializeAs="String">
                <value>640</value>
            </setting>
            <setting name="CAMCONTROL_FRAMEHEIGHT" serializeAs="String">
                <value>480</value>
            </setting>
            <setting name="CAMCONTROL_ZOOM" serializeAs="String">
                <value>1</value>
            </setting>
            <setting name="CAMCONTROL_ACTIVELENS" serializeAs="String">
                <value>0</value>
            </setting>
            <setting name="MAX_OID" serializeAs="String">
                <value>0</value>
            </setting>
            <setting name="CAM_MESSAGE_PORT" serializeAs="String">
                <value>8000</value>
            </setting>
            <setting name="DEF_FRAME_QUALITY" serializeAs="String">
                <value>60</value>
            </setting>
            <setting name="DEF_FRAME_HEIGHT" serializeAs="String">
                <value>480</value>
            </setting>
            <setting name="DEF_FRAME_WIDTH" serializeAs="String">
                <value>640</value>
            </setting>
            <setting name="DEF_FRAME_RATE" serializeAs="String">
                <value>1000</value>
            </setting>
        </HST.Camera.Properties.Settings>
        <CamInterface.Properties.Settings>
            <setting name="CAMCONTROL_FRAMERATE" serializeAs="String">
                <value>1</value>
            </setting>
            <setting name="CAMCONTROL_FRAMEQUALITY" serializeAs="String">
                <value>60</value>
            </setting>
            <setting name="CAMCONTROL_FRAMEWIDTH" serializeAs="String">
                <value>640</value>
            </setting>
            <setting name="CAMCONTROL_FRAMEHEIGHT" serializeAs="String">
                <value>480</value>
            </setting>
        </CamInterface.Properties.Settings>
    </userSettings>
</configuration>

Danke schonmal für jede Hilfe.

Gruß,

dr_d00m

17.04.2008 - 10:24 Uhr

Danke erstmal für den Tip.
Also so ganz hat das nicht funktioiert. Aus irgendeinem mysteriösen Grund hat das "!=" nicht funktioniert. Ich hab das dann durch eine äquvalente Prüfung mit Equals() ersetzt und das hat geklappt.

Gruß,

dr_d00m

15.04.2008 - 14:59 Uhr

Hallo zusammen,

gibt es eine Möglichkeit einzelne modifizierte Felder in einem DataSet zu erkennen?

Folgendes ist mir klar:


DataRow testRow = dataTable.Rows[0];
            testRow[0] = 11880;
            if(testRow.RoeState == DataRowState.Modified)
            {
                  ...
            }

Also bei einer DataRow ist das ja kein Problem. Aber wie genau funktioniert das mit einer bestimmten Zelle?

Danke schonmal und Gruß,

dr_d00m

27.03.2008 - 08:38 Uhr

Ok, stimmt. Das funktioniert tatsächlich.
Es hat nur länger gedauert bis ich es verstanden hab...😁

Danke für die ausdauernde Hilfe 😉

26.03.2008 - 17:49 Uhr

Danke winSharp93, aber ich glaube die Antwort von herbivore triffts eher, wenn auch leider nicht so, wie ich das gerne gesehen hätte😉

Im Endeffekt beleibt mir dann nur den Typ per if-Abfrage abzufragen und dann die Methode CustomizeValue je nach Typ aufzurufen.
Oder hat jemand noch einen anderen Vorschlag? Ich hab mir auch Gedanken drüber gemacht mit var zu arbeiten. Aber ich bin mir da nicht so sicher wegen der Typsicherheit...PHP lässt grüßen.

Gruß,
dr_d00m

26.03.2008 - 17:11 Uhr

Nun ja, eigentlich hatte ich die generische Liste nur als Beispiel genommen, um das Problem leicht verständlich zu machen. Ich glaube ich geh mal ein wenig mehr ins Detail.
In der Anwendung, die ich schreibe, werden Datentypen aus einer Datenbank gelesen, die dann zu anderen Werten aus der Datenbank passen, von denen ich vorher nicht weiß, welchen Datentyp sie haben (sind also grob gesagt einfach objects).

Da steht dann beispielsweise sowas drin wie INTEGER.
Ich lese nun einerseits die Daten aus der Datenbank aus und die dazu passenden Datentypen. Mit einer Methode, die mir ein Type-Objekt zurückgibt, wandel ich die Datentypen, die in der DB stehen in C# Datentypen um. Also z.B.:


Type typ = convertType("INTEGER"); // -> System.Int32

Damit hab ich den den Datentyp des Wertes, der in der Datenbank steht.

Diesen Wert übergebe ich dann einer generischen Methode. Diese stellt so allerhand Sachen mit dem Wert an (prüft auf DBNull, wandelt "J" und "N" in bool-Werte um, usw.)
Das sieht dann ungefähr wie folgt aus:


ValueCustomizer.CustomizeValue <Activator.CreateInstance(typ)> (objectFromDatabase);

Dabei ist ValueCustomizer eine statische Klasse mit der statischen Methode CustomizeValue<T>(object obj).

Also um nun den Datentyp aus der Datenbank in die Methode zu bekommen, dachte ich könnte ich ihn "einfach" per GetType() bestimmen. So einfach ists aber nicht und genau da liegt jetzt auch das Problem.

Also das ist die ausführliche Variante. Hoffentlich hilft das noch ein wenig beim Verständnis, auch wenn ich selber nicht sicher bin, ob ich das verstehen würde wenn ich es lese 😉

26.03.2008 - 16:39 Uhr

Hallo und danke für die schnelle Antwort. Den Foren beitrag hatte ich tatsächlich noch nicht gesehen.
Leider sind die Antworten dort auch noch nicht ganz was ich suche.

Der Code


List <Activator.CreateInstance(typ)>= new List<Activator.CreateInstance(typ)>();

wirft direkt einen Compilerfehler aus:

Fehler 1 Der Operator "<" kann nicht auf Operanden vom Typ "Methodengruppe" und "object" angewendet werden.

Generics (wie im Thread von Khalid vorgeschlagen) kommt auch nicht in Frage, da ich ja eigentlich keine generische Liste verwende, sondern eine eigene generische Funktion.

Damit fällt dann auch der letzte Beitrag von dN!3L raus, da ich ja keine Klasse erzeugen will.
Vielleicht war das Beispiel auch etwas doof gewählt, zugegeben.

Aber evtl. hat ja noch jemand eine kluge Lösung zu dem Problem.

26.03.2008 - 16:13 Uhr

Hallo Forum,

ich hänge grad an einem Problem, bei dem ich einer generischen Methode einen Datentyp übergeben muss, der zur Laufzeit ermittelt wird.
Zur Veranschaulichung mal ein kleines Beispiel, das das Problem zeigt (in meinem Code ist es eine eigene, generische Methode und nicht List<T>, prinzipiell aber dasselbe):


public static void CreateList(object obj1, object obj2, object obj3)
        {
            // erstmal den Type von obj1 holen
            Type typ = obj1.GetType();
            // dann dynamisch die Typzuweisung vornehmen -> hier knallts
            List < typ >= new List<typ>();
            ...
         }

Also wie man sieht möchte ich der Liste den Typ anhand des übergebenen Objekts zuweisen. So wie ich es hier gemacht hab, gehts schonmal nicht.
Gibt es irgendeine Möglichkeit, den Typ wie hier dynamisch zuzuweisen?

Ich wär für jede Hilfe dankbar.

Gruß,

dr_d00m

17.03.2008 - 11:39 Uhr

verwendetes Datenbanksystem: Oracle 10g

Hallo zusammen,

ich bin neu in der ADO.Net Programmierung und stehe vor einem (wie ich finde) heiklen Problem.
Ich lade ein DataSet mittels OracleAdapter. In der Datenbank befinden sich auch Werte, die NULL sein können Daraus resultiert, dass diese Werte nun im DataSet als DBNull abgespeichert sind, soweit ich verstanden habe.

Frage ich nun diese Werte aus dem DataSet ab, und treffe auf einen DBNull-Wert wird eine InvalidCastException geworfen. Hier der Code dazu:


DataTable tbl = ds.Tables[0];

foreach (DataRow row in tbl.Rows)
{
                    id = Convert.ToInt32(row[ID"]);
                    classtype = Convert.ToString(row["KLASSE"]);
                    commonname = Convert.ToString(row["NAME"]);
}

Ich versteh ja auch, dass ich nicht einfach die Datenbankrückgabe, welche DBNull ist, in einen String umwandeln kann.
Aber gibt es denn nicht eine andere Möglichkeit als jedes Mal erst eine Abfrage zu machen und zu checken, ob der Wert im DataSet DBNull ist? das war bis jetzt die einzige halbwegs vernünftige Lösung, die Google rausgeschmissen hat. Allerdings ist die für eine größere Menge an Daten vergleichsweise umständlich und auch nicht geeignet für das Projekt, dass ich zur Zeit bearbeite, da dort sehr viel auf Dynamik gesetzt wird...

Oder ist etwas mit meiner Abfragemethode nicht in Ordnung?

Ich wäre wirklich sehr dankbar für jegliche Hilfe.

Gruß,

dr_d00m

27.02.2008 - 11:58 Uhr

Danke für die schnelle Antwort. Jetzt funktionierts.

27.02.2008 - 09:04 Uhr

verwendetes Datenbanksystem: XML

Hallo Forum,

ich möchte eine selbst geschriebene Klasse per XMLSerializer serialisieren. Anfangs dachte ich, dass sei die einfachste Möglichkeit meine Daten per XML zu exportieren, aber jetzt bin ich mir da nicht mehr so sicher.
Ich hab folgendes Problem:
Die Klasse nutzt in einigen Properties Ableitungen der Klasse System.Collections.Generic.Dictionary. Das war schonmal das erste Problem. Ich hab gegoogelt und folgende Lösung gefunden: Die Klasse Dictionary kann nicht mit mit dem XML Serializer umgehen, es sei denn eine Ableitung der Klasse implementiert das Interface IXmlSerializable. Soweit so gut. Das habe ich dann implementiert und siehe da , die vorher zur Laufzeit auftretenden Exceptions waren verschwunden.
Leider tut sich nun ein neues Problem auf, zu dem ich nicht so einfach eine Lösung gefunden hab. Und zwar schreibt mir der XMLSerializer nur eine Zeile in die XML Datei.

Könnte dies daran liegen, dass ich das Interface in meinen Dictionary Ableitungen verwendet hab?

Hier ist der passende Code zur Implementierung:


[Serializable()]
public class FieldDictionary
    : Dictionary<string, Field>, IXmlSerializable
{
        public System.Xml.Schema.XmlSchema GetSchema()
        {
            return null;
        }

        public void ReadXml(System.Xml.XmlReader reader)
        {
            XmlSerializer keySerializer = new XmlSerializer(typeof(string));
            XmlSerializer valueSerializer = new XmlSerializer(typeof(Field));

            bool wasEmpty = reader.IsEmptyElement;
            reader.Read();

            if (wasEmpty)
                return;

            while (reader.NodeType != System.Xml.XmlNodeType.EndElement)
            {
                reader.ReadStartElement("item");
                reader.ReadStartElement("key");
                string key = (string)keySerializer.Deserialize(reader);
                reader.ReadEndElement();
                reader.ReadStartElement("value");
                Field value = (Field)valueSerializer.Deserialize(reader);
                reader.ReadEndElement();
                this.Add(key, value);
                reader.ReadEndElement();
                reader.MoveToContent();
            }
            reader.ReadEndElement();
        }

        public void WriteXml(System.Xml.XmlWriter writer)
        {
            XmlSerializer keySerializer = new XmlSerializer(typeof(string));
            XmlSerializer valueSerializer = new XmlSerializer(typeof(Field));
            foreach (string key in this.Keys)
            {
                writer.WriteStartElement("item");
                writer.WriteStartElement("key");
                keySerializer.Serialize(writer, key);
                writer.WriteEndElement();
                writer.WriteStartElement("value");
                Field value = this[key];
                valueSerializer.Serialize(writer, value);
                writer.WriteEndElement();
                writer.WriteEndElement();
            }
        }

Hierbei ist die Kalsse Field eine sebst erstellte Klasse, die einen Datentypen darstellt, der Objekte aufnimmt, die aus einer Datenbank stammen.

Eingesetzt wird dieses Dictionary in einer Oberklasse, die noch weitere Dictionaries und andere Properties hält, welche alle den gleichen Aufbau wie das oben abgebildete
haben.

Diese Klasse sieht dann wie folgt aus:



namespace DynDataModel
{	

    [Serializable()]    
	public class DataModel
	{

		// => Hier stehen im Code private Variablen, welche zu den fogenden
                // Properties gehören

        [XmlIgnore]
		public ALoader Loader
		{
			get
			{
				return loader; 
			}
			
			set
			{
				loader = value; 
			}
		}
		

        [XmlIgnore]
        public ASaver Saver
		{
			get
			{
				return saver; 
			}
			
			set
			{
				saver = value; 
			}
		}
		

        public int Count
		{
			get
			{
			    try
			    {
			        return fieldList.Count; // fieldList ist hier vom Typ 
                                                                // FieldDictionary
			    }
			    catch (Exception e)
			    {
                    Logfile.WriteLine("." + dsep + "log" +
                            dsep + "DataModel.log",
			           "Exception: +
			               System.Environment.NewLine +
			               "-> Exception-Message: " + e.Message +
			                System.Environment.NewLine +
			               e.StackTrace,
                        fadd);
			        throw e;
			    }
			}
		}
		
        public FieldDictionary FieldList
		{
			get
			{
			    return datatypeList;
			}
		}
		


        public DatatypeDictionary HelpList
		{
			get
			{
			    return helpList;
			}
		}
		
	
        public DatatypeDictionary DeviceList
		{
			get
			{
			    return deviceList;
			}
        }
		

		public DataModel()
		{
		    fieldList = new FieldDictionary();
		    deviceList = new DatatypeDictionary();
            helpList = new DatatypeDictionary();

            // Initialize variables used for Logging
            dsep = Path.DirectorySeparatorChar;
            fadd = Logfile.FilenameAddon.DayMonthYear;

		    // When Loglevel can be set, Logfile writing mechanism has to be 
		    // altered.
		    // Logfile.WriteLine("DataModel_" + date + ".log",
		       //"DataModel initiated!");
		}

            // Nun folgen nur noch Methoden, die soweit ich weiß keine Rolle bei der 
            // Serialisierung spielen.

Alle meine Klassen, die serialisiert werden sollen, haben das Attribut [Serializable()].
Mit [XmlIgnore] habe ich nur die Loader- und Saver-Properties ausgeschlossen, die für Datenbank Im- und Export zuständig sind.

Die Serialisierung sieht wie folgt aus:



System.Xml.Serialization.XmlSerializer writer =
                    new System.Xml.Serialization.XmlSerializer(model.GetType());

                // model ist hier vom Typ DataModel und wurde schon vorher instanziiert
                // und mit Daten gefüllt.

                System.IO.StreamWriter file =
                    new System.IO.StreamWriter("model.xml");

                writer.Serialize(file, model);
                file.Close();

In die XML-Datei wird dann nur folgende Zeile geschrieben:


<?xml version="1.0" encoding="utf-8"?>
<DataModel xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />

Hat jemand mal vielleicht eine Idee, wie dieses Problem zu lösen ist?
Ich hoffe ich habe nichts vergessen. Falls noch etwas fehlen sollte, das euch weiterhilft, sagt Bescheid.

Ich bin auf jeden Fall für jegliche Hilfe dankbar.

Gruß,

dr_d00m