2

xsd ファイルを使用して xml ファイルを検証しています。xsd ファイルでは、いくつかの要素のみが必須で、残りはオプションです。ただし、それはシーケンシャルであるため、データテーブルに表示される要素の順序が問題になります。ユーザーが遭遇する可能性のあるいくつかのシナリオを検討した後、解決に少し問題があるケースを思いつきました。

たとえば、xsd ファイルには A、B、C、D、E、F の 6 つの要素があります。A、C、D のみが必要です。ユーザーは A、C、D から始めます。ユーザーが B という名前の列を追加できるようにします。ただし、最後に A、C、D、B が追加されます。したがって、連続しているため、次のようになります。検証しません。

私の質問は、xsd 検証に合格するために A と C の間に B を挿入するにはどうすればよいですか? または、datagridview 内のものを並べ替えて、それをデータテーブルに反映する他の方法はありますか?

テーブルが表示されているデータグリッドビューの列をユーザーが並べ替えられるようにすることで、問題を解決できると思いました。

編集: xsd ファイルを変更できないという仮定の下で。

あれは、

    dataGridView1.AllowUserToOrderColumns = true;

ただし、検証では、最後の必要な要素の後に「要素」が必要であることが常に示されていました。これは、datagridview の datacolumn のシフトがデータテーブル自体に反映されなかったことを意味します。

検証に合格するには、列を他のすべてのものに対して相対的なそれぞれの場所に挿入する必要があると思います。または、少なくとも最後に挿入し、ユーザーが検証ボタンを押したときに適切な順序を反映します。

オンラインで次のようなことを試すように言われている他のものに出くわしました。

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

しかし、私はまだそれを実装していません。上記の行が機能しない場合のアイデアはありますか? =)さらに、データテーブルをユーザーがデータグリッドビューで行うことと同期できるようにしたいと考えています。それが理想です。ユーザーがデータグリッドビューで列を移動すると、データテーブルにその変更が反映されます。

洞察があれば大歓迎です。必要に応じて追加情報を提供させていただきます。ありがとう!

よろしくお願いします。

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

4

2 に答える 2

2

あなたは XSD を提供していませんが、使用していると思います

 <xs:sequence>.

代わりに使用

 <xs:all>

例えば

 <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>

上記の例は、"firstname" 要素と "lastname" 要素が任意の順序で表示され、各要素が 0 回または 1 回出現する可能性があることを示しています。

詳細については、 http://www.w3schools.com/schema/el_all.aspを参照してください。

于 2011-06-14T21:25:14.873 に答える
1

ユーザーがスキーマの順序でデータを入力する必要がなく、代わりにシステムがスキーマに基づいて適切な順序を自動的に決定する方が理にかなっていると思いませんか? 仮定を考えると、スキーマは同様の構造になるように思われるため、スキーマから順序を決定することは難しくありません。

たとえば、DataTable任意の順序で列を使用して、ユーザー入力に合わせてそのままにしておくことができます。データを xml に出力する必要がある場合は、スキーマ ファイルを調べて、出力する必要がある要素のシーケンスを特定します。要素のリストを反復処理し、DataTable見つかった一致する列を出力します。

スキーマ ファイルを処理してシーケンスを検出するには、 を使用するか、スキーマ自体が xml であるため、、などSystem.Xml.Schema.XmlSchemaを使用して xml を直接クエリできます。XmlDocumentXPathXDocument

于 2011-06-28T04:08:42.830 に答える