Laden...

Forenbeiträge von lindan Ingesamt 103 Beiträge

19.01.2009 - 13:13 Uhr

So rein aus Interesse:
funktionieren "<" und ">" ohne escaped zu werden?
Oder werden sie in &lt; &gt; umgewandelt?

15.01.2009 - 10:07 Uhr

Sätze in denen die Wärter "Xpath" und "sehr leicht" vorkommen, sieht man relativ selten....

😁

14.01.2009 - 11:31 Uhr

Beschreib doch bitte mal mit zwei, drei Sätzen Kontext, was du machen willst.
Ich habe weder die Aufgabenstellung noch das Problem nachvollziehen können.

14.01.2009 - 10:31 Uhr

norman_timo:

Da hast du sicherlich recht. Als Orientierung fand ich es aber recht nützlich, einfach um auszuschliessen, dass man in seinem Format ein wichtiges Element vergißt, welches dann im Nachhinein mühevoll nachgezogen werden muß.

Für Otto Normaluser ist ein vollständiger Nachbau in der Tat overkill.

Grüße!

14.01.2009 - 08:43 Uhr

Tipp:
Es gibt offizielle Standardformate für alle möglichen handelsrelevanten Dokumente.
(EDIFACT)
Falls du das Format selbst stricken sollst, würde ich mich an dieser Dokumentstruktur orientieren.

Grüße!

22.08.2008 - 08:20 Uhr

@lindan:
Wozu?
Lass es auf IBindingList(View), denn das umkopieren ist unsinnig.

Schau dir lieber mal an, wie man dann MVP, also Presenter und PassivView implementiert.

Dein View stellt nach aussen die DataSource und DisplayMember zur Verfügung,
ausserdem die ChangedEvents, Nichts weiter.

Der Presenter ist zuständig für das besorgen der richtigen Liste, und anhängen an
die entsprechenden Properties, und Verarbeitung der entsprechenden Daten.

Du kannst dann verschiedene Presenter und auch verschiedene Views implementieren, die dann die verschiedenen Eventualitäten abdecken.

Will do. Ich schaue mir das heute mal aus der Nähe an und melde mich mit Fangfragen aller Art zurück. Danke für die Antworten. =)

21.08.2008 - 15:32 Uhr

Mir fehlt der goldene Einzeiler, um den Inhalt einer IBindingList in eine Datatable/Dataset umzuverpacken. 😉

21.08.2008 - 14:49 Uhr

Du musst doch schon entscheiden, ob du im BL mit typisierten Objekten oder DataSets arbeiten willst. Mixen solltest du das nicht.

Ich werde versuchen mich präziser auszudrücken.

Der IST-Zustand ist, das an den Comboboxen typisierte Listen hängen. Die Typen dieser Listen und der Typ der enthaltenen Db-Objekte wurden von einem DbTool, dass die Datenbank gescannt hat, generiert.
SOLL-Zustand ist, dass ich diese direkte Kopplung sprengen will. Ein getrennter BL im eigentlichen Sinne existiert momentan nicht.
Zur Abfrage der Datenbank muß ich momentan weiterhin die generierten Db-Objekte verwenden. Mein BL soll im Prinzip das machen, was du auch gesagt hast: über ein Interface, Datasets o.ä. gui und db entkoppeln.

Viele der Dbobjekte geben ausschliesslich typisierte Listen zurück.

Frage ist nun: was tun?

21.08.2008 - 12:20 Uhr

Momentan ist es so, dass an vielen Comboboxen (typisierte) Collections von typisierten Objekten hängen.
Im Code werden häufiger Datasources umgehängt.
Bsp:
Die Form will die DataSource für eine Combobox aktualisieren.
Sie macht in etwa folgendes(ist ja alles in einem, die Dbobjekte/Methoden sind vorgeneriert)

cbBoxBindingSource.Datasource = dbKfzTabelleAbfrageObjekt.GetAutos(Parameter);

diese Methode liefert eine dbKfzTabelleAutoCollection zurück, die n Objekte vom Typ dbKfzTabelleAutos enthält.

Alle möglichen Boxen verwenden alle möglichen Db-Objekte und Collections, alle mit dieser Syntax. Nun bin ich unsicher, wie ich das krisensicher in ein DataSet bekomme, weiß aber, dass diese ganzen Collections IBindingList implementieren.

[Ein kurzer Test hat bestätigt dass ich die Dinger einfach in IBindingList casten kann]

WARUM alle naslang die Datasources neu angehängt und umgewandelt werden, hat sich mit noch nicht genau erschlossen, das geht sicher auch eleganter. Aber so ist es nunmal im Moment. 🙁

21.08.2008 - 12:00 Uhr

Die (versprochen) letzte blöde Frage:

Könnte ich statt Datasets auch IBindingLists nehmen? Oder ist das schon wieder zu speziell?

21.08.2008 - 09:20 Uhr

Gui/BL soweit ok.

Ein Problem was ich noch sehe ist, dass die Datenzugriffsobjekte momentan über ein OR-Mapper-ähnliches Tool generiert werden. Es ist im Gespräch, dieses Tool mittelfristig gegen ein anderes zu ersetzen.
Um zu verhindern, dass der bl am Tag X zusammenbricht, will ich ihn von diesen "gefährlichen" Db-Objekten abnabeln.
Gehe ich recht, dass ich dazu die konkreten dal-Klassen hinter entsprechenden Interfaces verstecken muß?
Ich hätte dann, bezogen auf eine der Monsterforms, eine Struktur in der Art ("leicht" vereinfacht ausgedrückt):

formX
|
blFormX
|
----InterfaceDalFormX
|
dalFormXImplementation

Right?

21.08.2008 - 07:55 Uhr

Generelle Frage:

Ist die BeginLoadData() und EndLoadData() - Geschichte sinnvoll?

21.08.2008 - 07:39 Uhr

Herbivore, zunächst danke für die Antwort.
die gui-bl-dal Geschichte ist prinzipiell soweit klar.
Es hakt ein wenig an der Praxis. Nehmen wir als Beispiel mal eine Combobox. Diese wurde vom ursprünglichen Erfinder im FormsDesigner per Bindingsource an ein Datenbankobjekt gehängt.
Sowohl das Datenbankobjekt, als auch die Bindingsource hängen nun im Form-Code. Wie entzerre ich das am besten?
Lasse ich die bindingsource in der Form, die dann als Datasource eine Property aus der bl-klasse hat, die sich die das Datenbankobjekt aus dem dal bekommt?
Oder ist das unpraktisch? Manche Forms können bis zu 30 dieser Bindings haben...
Es sind diese "kleinen" Entscheidungen, die den Weg zum Großen Ganzen verkomplizieren... kopfkratz

20.08.2008 - 15:30 Uhr

Mit diesem Thema schlage ich mich auch schon eine Weile herum. Es geht um die Entmüllung mehrerer Forms, die 5000+ Zeilen haben, weil alles von Optik über Berechnungen, Daten, Geschäftslogik und DB Zugriffe komplett in diesen Forms enthalten sind. Hier sollen grundsätzlich die verschiedenen, verklebten Schichten gelöst werden.

Trotzdem oder gerade deshalb kämpfe ich gegen eine gute Lösung an.
Mein Ansatz bisher:

  • ein Klasse, die die Form kennt. (ChefBL). ChefBL kennt:
  • mehrere Klassen, die sich um Berechnungen etc. kümmern, thematisch gruppiert.
  • benötigen diese Daten, haben sie Zugriff auf eine/mehrere Klassen, die die Db-Zugriffe verwaltet. (der DalChef).

Ich grüble nun, ob das wirklich sinvoll ist:
Was mache ich mit den ganzen Datasources/Bindingsources, die, im FormDesigner verankert, momentan fröhlich kreuz-und-quer direkt auf diverse (proprietäre) DB-Objekte zugreifen? (auf Properties des ChefBls umlegen?)
Lohnt sich der Aufwand mit einer ChefBL-Klasse? (Viele Methodenaufrufe werden einfach an die spezialisierten Klassen durchgereicht...)

Alles garnicht so einfach. =)

20.08.2008 - 09:41 Uhr

Das offensichtliche zuerst versuchen:

bau einen (leeren) parameterlosen Konstruktor in die Klasse.

19.08.2008 - 10:27 Uhr

In deiner Methode legst du alles neu an -> funktioniert nicht.

Du hast einen DataAdapter, der ein DataSet/Datatable befüllt hat, die du an eine Gridview gehängt hast.
Du mußt jetzt eigentlich nur diesen DataAdapter nehmen und ein Update durchführen. Eventuell müssen vorher noch die entsprechenden Commands erzeugt werden (was automatisch erledigt werden kann: siehe CommandBuilder).

01.08.2008 - 12:14 Uhr

 OleDbConnection conn = new OleDbConnection("File Name = pps.udl");
            da = new OleDbDataAdapter(cmdStr, conn);
            OleDbCommandBuilder cb = new OleDbCommandBuilder(da);

//---> ergänzen
Dataset ds = new Dataset();
da.Fill(ds);
dt = da.Tables[0];
// <--          

 //PrimaryKey festlegen
            DataColumn kndnr = new DataColumn("kndnr", Type.GetType("System.Int32"));
            DataColumn[] keyColumn = new DataColumn[1];
            dt.Columns.Add(kndnr); //FEHLER bei Compilieren: "Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt."
            dt.PrimaryKey = new DataColumn[] { kndnr };
            //Ende Primary Key festlegen

Dein dt wird nie gefüllt und daher muß es null sein. Versuch mal die eingefügten Zeilen aus.

01.08.2008 - 10:12 Uhr

Mama, sind wir bald da?

Hunger! Durst! Pippi!

30.07.2008 - 13:05 Uhr

XmlWriter und XmlTextWriter haben Methoden um Comments zu schreiben.

MSDN

30.07.2008 - 12:20 Uhr

Es gilt für jedwedes Thema, was irgendwie zum Komplex "XML" gehört,
dass du ohne eine gehörige Dosis Grundlagenwissen mit neunundneunzigprozentiger Sicherheit gegen die Wand fährst.

Frontal und schmerzhaft.

Da hilft kein Designer und kein copy&paste.

Solltest du häufiger damit zu tun haben:

Erst Wissen anlesen - dann anfangen. Spart netto viele Stunden Frust und Ärger.

30.07.2008 - 11:25 Uhr

Kurzform (eine von mehreren Varianten)

XmlDocument laden.
Mit Xpath die richtigen Knoten selektieren.
Knoten entsprechend ändern.
XmlDocument zurückspeichern.

Alternativ: XmlReader und XmlWriter verwenden. Theoretisch performanter, in der praktischen Anwendung etwas unhandlicher.

Zu allen Punkten findest du hier im Forum tonnenweise Infos.

30.07.2008 - 11:19 Uhr

Ich arbeite mit den Xml-Objekten:

Ich glaube es ist auch egal womit man speichert. Denn es ist scheinbar nicht erlaubt in Attributen ein & zu setzen.

Unsinn.

&amp;

kann ohne Probleme verwendet werden.

<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>

<article test="A &amp; B">Hoho</article>
28.07.2008 - 09:00 Uhr

*seufz*

Hast Du verstanden, was das Problem war?

14.07.2008 - 08:13 Uhr

Mit deinem Code erzeugst du eine neue Spalte. Wenn dich die "alte" stört, kannst du sie ja aus dem Gridview schmeißen.

Alternativ:

Du setzt autogeneratecolumns auf false und fügst gleich nur dir Spalten hinzu, die du brauchst. 😁

14.07.2008 - 07:46 Uhr

Hab zwar wenig mit Webforms zu tun, aber denke es ist auch nicht anders als bei winforms.
Erzeuge dir n neue Dropdowns, geb ihnen die richtige Position und hänge sie mit meineNeuesDropDown.parent = dieFormInDerIchHängenSoll
ein.

14.05.2008 - 14:15 Uhr

Hallo,

ich habe //adBKMURL und //text getestet in XML Spy. Dort bekomme ich den Inhalt der Knoten zurück, hätte mich auch gewundert, da ja // ne relative Adressierung einleitet.

Dennoch kriege ich das nicht zurück geschrieben.

Komisch..

Wenn du Namespaces hast brauchst du den Namespacemanager. Auch der Default-Namespace muss dann dort mit einem selbstgewählten Präfix hinterlegt sein.
Dein XPath kann im XmlSpy hundertmal matchen, das heißt nicht, das es auch im .NET funktioniert. Ein häufiges Problem, wenn man mit Xpath arbeitet.

14.05.2008 - 10:44 Uhr

Gibt dir Xpath denn überhaupt Knoten zurück?

Das wäre als erstes zu Prüfen.
Falls nicht, ist dein XPath -Statement falsch, bzw. der fragliche Namespace ist im Namespacemanager nicht angelegt.

29.04.2008 - 14:06 Uhr

Ich setze einen 5er auf "Datenbank im Projekt".

09.04.2008 - 14:46 Uhr

warum achreibst du dir nicht einen unittest, der diese datei einliest und die darin enthaltenen statements testet?

und was meinst du mit dem:

Wie transformiert man ein XML (mit xslt) in eine Code.cs mit "\n, \t,...."

was ist mit \n\t gemeint???

Er möchte hübsch formatierten Code mit Newlines und Tabs.

09.04.2008 - 14:01 Uhr

?

07.04.2008 - 14:11 Uhr

Ersetze mal überall Host durch Horst und Port durch Paul. Wenns dann geht, ist eines der Wörter reserviert.

04.04.2008 - 12:33 Uhr

Sollte keine Anspielung sein. Als regelmäßiger Benutzer der Suche finde ich es generell nervig, wenn ich in einem Thread, der zu meinem Problem passt, keine Lösung finde. 🙂

[edit:wrong button]

04.04.2008 - 10:46 Uhr

Lösung bitte posten. Manche Menschen verwenden für ihre Probleme die Suche und freuen sich über Lösungen. 🙂

03.04.2008 - 13:37 Uhr

Und wenn wir jetzt noch einen Schnippel Programmcode dazu hätten, könnten wir fast schon was damit anfangen...

03.04.2008 - 12:01 Uhr

Versuch mal (ungetestet)

XmlNamespaceManager nsMgr = new XmlNamespaceManager(doc.NameTable);
nsMgr.AddNamespace("dc", "http://purl.org/dc/elements/1.1/");
nsMgr.AddNamespace("upnp", "urn:schemas-upnp-org:metadata-1-0/upnp/");
nsMgr.AddNamespace("XYZ", "urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/");

und dann


Item.SelectSingleNode("XYZ:res", nsMgr);

03.04.2008 - 11:47 Uhr

Es ist ziemlicher Blödsinn für jede neuen Adressdatensatz eine neue Datatable zu erzeugen.
Dein Ergebnis würde sinnvollerweise so aussehen:


     <?xml version="1.0" standalone="yes"?>
<Personen>
  <Person>
    <Name>bla</Name>
    <Vorname>gig</Vorname>
    <Adresse>zugfuzf</Adresse>
    <PLZ>79876987</PLZ>
    <Ort>ufjfuf</Ort>
    <Telefon_x0020_Büro>86986</Telefon_x0020_Büro>
    <Telefon_x0020_Mobil>869866</Telefon_x0020_Mobil>
    <Telefon_x0020_Privat>868896</Telefon_x0020_Privat>
  </Person>
  <Person>
    <Name>bla</Name>
    <Vorname>gig</Vorname>
    <Adresse>zugfuzf</Adresse>
    <PLZ>79876987</PLZ>
    <Ort>ufjfuf</Ort>
    <Telefon_x0020_Büro>86986</Telefon_x0020_Büro>
    <Telefon_x0020_Mobil>869866</Telefon_x0020_Mobil>
    <Telefon_x0020_Privat>868896</Telefon_x0020_Privat>
  </Person>
</Personen>

Zusammenhang:
0. Deine Form bekommt eine Datatable als Variable.

  1. Du lädst deine Daten aus dem XML File in DIESE EINE Datatable.
  2. Dein Button erzeugt eine neue Zeile IN DIESER DATATABLE!!
  3. das machst du so oft, bis alle Datensätze drin sind.
  4. dann speicherst du DIESE DATATABLE! (Genau, die EINE DATATABLE, die EINZIGE DATATABLE in deiner Form) mit WriteXML zurück.

Comprís? 🙂

[edit: die Vorgehensweise wurde im Thread mehrfach erklärt. Probiers halt mal aus!]

03.04.2008 - 10:25 Uhr

Keine Ahnung, was deine Frage ist... schulterzuck

02.04.2008 - 15:06 Uhr

Post erstellt, Vorschau, dann wollte ich den Post abschicken, -> Explosion.

Hier meine Antwort nochmal:

Du liest ein XML in ein Dataset, bzw. eine Datatable. Dann würde ich auch weiterhin mit dieser Tabelle arbeiten und sie nicht gleich wieder wegwerfen (Scope!).

button....


DataRow dr = ds.Tables[0].NewRow();
dr[0] = textBox2.Text; dr[1] = textBox3.Text; dr[2] = textBox4.Text; dr[3] = textBox5.Text; dr[4] = textBox6.Text; dr[5] = textBox7.Text; dr[6] = textBox8.Text; dr[7] = textBox9.Text;
ds.Tables[0].Rows.Add(dr);
ds.WriteXml("C:\\phone.xml");

02.04.2008 - 15:04 Uhr

Du liest ein XML in ein Dataset, bzw. eine Datatable. Dann würde ich auch weiterhin mit dieser Tabelle arbeiten und sie nicht gleich wieder wegwerfen (Scope!).

button....


DataRow dr = ds.Tables[0].NewRow();
dr[0] = textBox2.Text; dr[1] = textBox3.Text; dr[2] = textBox4.Text; dr[3] = textBox5.Text; dr[4] = textBox6.Text; dr[5] = textBox7.Text; dr[6] = textBox8.Text; dr[7] = textBox9.Text;
ds.Tables[0].Rows.Add(dr);
ds.WriteXml("C:\\phone.xml");

02.04.2008 - 10:26 Uhr

Tach!

Im List & Label Reportgenerator gibt es einen Designer. Wenn man ein Textfeld einfügt und einen Doppelclick auf die Absatzeigenschaften macht, erscheint eine Form,
"Text bearbeiten", die wie ein Funktionsassistent Variablen etc. zum Bau einer Formel zur Verfügung stellt.

Den Designer einzubinden ist kein Problem, die Frage ist nun: kommt man an diesen "Assistenten" auch direkt ran?

Ich bräuchte das Teil nur als Formelbastler, nicht den kompletten Reportdesigner.

28.03.2008 - 11:56 Uhr

*EDIT*
vielleicht ein problem mit dem dataadapter?

hab das gerade gefunden:

'Durch die Methode Fill werden keine Informationen zu Primärschlüsseln geladen. Um dieses standardmäßige Verhalten zu ändern, können Sie die Eigenschaft MissingSchemaAction des DataAdapter-Objekts zu MissingSchemaAction.AddWithKey ändern, wodurch die Primärschlüssel-Metadaten zusammen mit den Standardinformationen geladen werden. Beispiel:
'

Was passiert denn, wenn du:
oCommand.MissingSchemaAction = MissingSchemaAction.AddWithKey;

setzt. An sich sollten die Probleme dann verschwinden.

Btw: oCommand ist kein idealer Name für einen DataAdapter.

28.03.2008 - 09:34 Uhr

Naja... es ist ja nun nicht so, als würde ein Zeichen in einer Textdatei viel Platz verbrauchen, von daher verstehe ich das Problem nicht ganz....

26.03.2008 - 14:51 Uhr

Die Zeile mit dem String.Empty kannst du m.E. weglassen.

25.03.2008 - 14:19 Uhr

Die Antwort ist jetzt wahrscheinlich zu banal,
aber warum lädst du nicht das XML in ein Dataset, und machst es über Grids?

Oder fischst dir die Elemente raus die du brauchst und generierst die benötigten Formelemente automatisch.
(Mir ist bewußt, dass das nur bei einfacheren Strukturen ohne größeren Aufwand machbar ist)

25.03.2008 - 10:22 Uhr

In MSDN solltest du alles finden. Es gibt verschiedene Möglichkeiten, die von dem abhängig sind, was du genau machen willst. Die Infos sind zwar ein wenig verstreut, aber vorhanden.
Du könntest z.B. das XML in ein Dataset laden, manipulieren und zurückschreiben. Hier ein Beispiel, wie das Einlesen funkioniert:

Exemplarische Vorgehensweise: Einlesen von XML-Daten in ein Dataset

20.03.2008 - 15:51 Uhr

Du könntest vor dem Convert mit

dt.Rows_.IsNull("CHARACTER_MAXIMUM_LENGTH")

prüfen, ob da null drin steht.

17.03.2008 - 10:59 Uhr

Verdacht:
da soll aus einer Windows-Applikation ein Reportfile generiert werden, dass dann auf einem Server landet wo fremde Menschen es sich mit ihrem Browser anschauen können (sollen).

17.03.2008 - 09:01 Uhr

Du wirst nicht daran vorbei kommen, dir ein paar elementare Sachen zu dem Thema anzulesen.

🛈

📗

Schau erstmal nach was ein Dataset ist, wie das Zusammenspiel mit DB's funktioniert und wie man einen DataAdapter erstellt. Das sollte die meisten Fragen beantworten.

Ansonsten wird eine "Kurzbeantwortung" deiner Frage wahrscheinlich mehr Fragen aufwerfen als lösen.

17.03.2008 - 08:55 Uhr

Zum Design hab ich mir gedacht nehm ich halt einfach CSS aber wie bind ich die im C# in mein späteres XML-File ein?

Es wäre möglich, dass ich das Problem falsch verstehe, aber du musst doch beim anlegen des XMLs nur den entsprechenden XML-Schnippel mit erzeugen:


<?xml-stylesheet type="text/xsl" href="meinStylesheet.xsl" ?>

Das wärs dann auch schon. 🙂