datatableで列を並べ替えますか?
-
27-10-2019 - |
質問
XSDファイルを使用してXMLファイルを検証しています。 XSDファイルでは、必要な要素のほんの一部のみが必要であり、残りはオプションです。ただし、それはシーケンシャルなので、要素がデータテイターブルロットに表示されるように順序が表示されます。ユーザーが遭遇する可能性のあるいくつかのシナリオを検討した後、私は解決に少し苦労しているというケースを思いつきました。
ケースは次のとおりです。たとえば、XSDファイルには6つの要素A、B、C、D、E、Fがあります。 A、C、およびDのみが必要です。ユーザーはA、C、Dから始めます。ユーザーは列を追加できます。名前を使用します。ただし、最後に添付されます。検証しないでください。
私の質問は、XSD検証が渡されるためにAとCの間にBを挿入するにはどうすればよいですか?または、DatagridViewで物事を並べ替えて、データテーブルにそれを反映する他の方法はありますか?
テーブルが表示されているDatagridViewの列をユーザーに再注文できるようにすることで、問題を解決できると思いました。
編集:XSDファイルを変更できないという仮定の下で。
あれは、
dataGridView1.AllowUserToOrderColumns = true;
ただし、検証は、最後に必要な要素が予想された後の「要素」が予想されることを常に教えてくれました。これは、DatagridViewのデータコラムのシフトがデータテーブル自体に反映されなかったことを意味します。
検証に合格するには、それが他のすべてに関連するそれぞれの場所に列を挿入する必要があると思います。または、少なくとも最後に挿入し、ユーザーが検証ボタンを押したときに適切な順序を反映します。
私はオンラインで他のいくつかのことに出くわしました:
Table.Columns["Column Name"].SetOrdinal(NewIndex);
しかし、私はまだ実装していません。上記の行が機能しない場合のアイデアはありますか? =)さらに、DatagridViewでユーザーが行うこととデータテーブルを同期できるようにしたいと考えています。それは理想的です。ユーザーがdatagridViewで列を移動する場合、データテーブルはその変更を反映する必要があります。
どんな洞察も大歓迎です。必要に応じて追加情報を提供していただければ幸いです。ありがとう!
心から、tf.rz
(.NET 3.5 SP1、Visual Studio C#2008)
解決
それはもっと理にかなっていないでしょう いいえ ユーザーにスキーマ順序でデータを入力するように要求し、代わりにシステムにスキーマに基づいて適切な順序を自動的に決定してもらう必要がありますか?あなたのスキーマはあなたの仮定を考えると同様の構造のものであるように思われるので、スキーマからの順序を決定することは難しくないはずです。
例の場合、あなたは離れることができます DataTable
現状では、ユーザーの入力を任意の順序で列と一致させます。データをXMLに出力する必要がある場合は、スキーマファイルを調べて、出力する必要のある要素のシーケンスを特定します。要素のリストを繰り返し、あなたからの一致する列を出力します DataTable
彼らが見つかったように。
スキーマファイルを処理してシーケンスを発見するには、使用することもできます System.Xml.Schema.XmlSchema
, 、または、スキーマ自体がXMLであるため、XMLを使用して直接照会することができます XmlDocument
, XPath
, XDocument
等
他のヒント
あなたはあなたの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」要素が任意の順序で表示され、各要素がゼロまたは1回表示される可能性があることを示しています。
見る http://www.w3schools.com/schema/el_all.asp 詳細については。