Frage

Ich verwende XSD -Dateien, um XML -Dateien zu validieren. In den XSD -Dateien sind nur wenige der Elemente erforderlich und der Rest sind optional. Es ist jedoch sequentiell, sodass die Reihenfolge der Elemente, wie sie in den Lots der Dataatable Materie erscheint. Nachdem ich ein paar Szenarien nachgedacht hatte, die der Benutzer begegnen kann, habe ich einen Fall gefunden, den ich ein wenig Probleme beim Lösen habe.

Der Fall ist Folgendes: Zum Beispiel gibt es 6 Elemente A, B, C, D, E, F in der XSD -Datei. Es werden nur A, C und D benötigt. Der Benutzer startet mit A, C, D. Ich erlaube dem Benutzer, eine Spalte mit dem Namen B. hinzuzufügen nicht validieren.

Meine Frage ist also, wie ich B zwischen A und C einfügt, damit die XSD -Validierung bestehen kann? Oder gibt es eine andere Möglichkeit, die Dinge in der DataGridView neu anzuordnen und diese im DataTable widerzuspiegeln?

Ich dachte, ich könnte das Problem lösen, indem ich dem Benutzer die Spalten in der DataGridView, in der die Tabelle angezeigt wird, neu ordnen kann.

Bearbeiten: Unter der Annahme, dass ich die XSD -Dateien nicht ändern kann.

Das ist,

    dataGridView1.AllowUserToOrderColumns = true;

Die Validierung sagte mir jedoch immer, dass ein "Element" nach dem letzten notwendigen Element erwartet wurde. Dies bedeutet, dass sich die Verschiebung im DataColumn in der DataGridView im DataTable selbst nicht widerspiegelt.

Um die Validierung zu bestehen, müsste ich die Spalte an den jeweiligen Ort einfügen, in dem sie relativ zu allem anderen ist. Oder zumindest am Ende einfügen und die richtige Reihenfolge reflektieren, wenn der Benutzer die Validierungs -Taste drückt.

Ich bin auf einige andere Dinge gestoßen, die mir gesagt haben, dass ich Dinge ausprobieren soll wie:

    Table.Columns["Column Name"].SetOrdinal(NewIndex);

Aber ich habe es noch nicht implementiert. Irgendwelche Ideen für den Fall, dass diese Zeile oben nicht funktioniert? =) Zusätzlich möchte ich in der Lage sein, das DataTable mit dem zu synchronisieren, was der Benutzer in der DataGridView tut. Das wäre ideal. Wenn der Benutzer die Spalten in der DataGridView verschiebt, sollte die DataTable diese Änderung widerspiegeln.

Jede Einsicht wird sehr geschätzt, ich werde gerne bei Bedarf zusätzliche Informationen anbieten. Vielen Dank!

Mit freundlichen Grüßen tf.rz

(.NET 3.5 SP1, Visual Studio C# 2008)

War es hilfreich?

Lösung

Würde es nicht sinnvoller machen nicht verlangen Sie den Benutzer, die Daten in Schemareihenfolge einzugeben und das System stattdessen automatisch die entsprechende Reihenfolge basierend auf dem Schema zu bestimmen? Es scheint, dass Ihre Schema angesichts Ihrer Annahmen ähnliche Konstruktionen haben. Daher sollte die Bestimmung der Reihenfolge aus dem Schema nicht schwierig sein.

Zum Beispiel könnten Sie das verlassen DataTable Wie es ist, entspricht der Benutzereingabe mit Spalten in beliebiger Reihenfolge. Wenn Sie die Daten an XML ausgeben müssen, untersuchen Sie die Schema -Datei und identifizieren Sie die Abfolge der Ausgaben. Iterieren Sie die Liste der Elemente und geben Sie übereinstimmende Spalten von Ihrem aus DataTable wie sie gefunden werden.

Um die Schema -Datei zu verarbeiten und die Sequenz zu entdecken, können Sie entweder verwenden System.Xml.Schema.XmlSchema, oder, wie das Schema selbst XML ist, können Sie die XML direkt verwenden XmlDocument, XPath, XDocument usw.

Andere Tipps

Sie haben Ihr XSD nicht gegeben, aber ich vermute, Sie verwenden

 <xs:sequence>.

Verwenden Sie stattdessen

 <xs:all>

z.B

 <xs:element name="person">
  <xs:complexType>
   <xs:all minOccurs="0">
    <xs:element name="firstname" type="xs:string"/>
    <xs:element name="lastname" type="xs:string"/>
    </xs:all>
  </xs:complexType>
 </xs:element>

Das obige Beispiel zeigt an, dass der "FirstName" und die "LastName" -Elemente in beliebiger Reihenfolge angezeigt werden können und jedes Element null oder einmal erscheinen kann!

Sehen http://www.w3schools.com/schema/el_all.asp Für weitere Informationen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top