Вопрос

Я использую XSD -файлы для проверки XML -файлов. В файлах XSD требуются лишь некоторые из элементов, а остальные являются необязательными. Тем не менее, он является последовательным, поэтому порядок элементов, как они появляются в DataTable Matter Pot. После рассмотрения нескольких сценариев, с которыми может столкнуться пользователь, я придумал случай, когда у меня есть небольшие проблемы с решением.

Дело в следующем: например, в файле XSD есть 6 элементов A, B, C, D, E, F. Только A, C и D необходимы. Пользователь начинается с A, C, D. Я позволяю пользователю добавить столбец с именем B. Однако он подключается на конце: A, C, D, B. Поэтому, поскольку он последовательно, оно будет не проверять.

Итак, мой вопрос: как мне вставить B между A и C, чтобы пройти проверку XSD? Или есть другой способ переупорядочить вещи в DataGridView и отразить это в данных DataTable?

Я думал, что смогу решить проблему, позволив пользователю переупорядочить столбцы в DataGridView, где отображается таблица.

РЕДАКТИРОВАТЬ: При предположении, что я не могу изменить файлы XSD.

То есть,

    dataGridView1.AllowUserToOrderColumns = true;

Тем не менее, проверка всегда говорила мне, что «элемент» после того, как ожидается последний необходимый элемент. Это означает, что сдвиг в данных Datacolumn в DataGridView не был отражен в самом DataTable.

Чтобы пройти проверку, я полагаю, что мне нужно было бы вставить колонку в соответствующее место, которое она относится ко всему остальному. Или, по крайней мере, вставьте его в конце и отразите правильный порядок, когда пользователь нажимает кнопку Validate.

Я сталкивался с другими вещами в Интернете, говоря мне, чтобы попробовать что -то вроде:

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

Но я еще не реализовал это. Есть идеи на случай, если эта линия выше не работает? =) Кроме того, я хочу иметь возможность синхронизировать DataTable с тем, что пользователь делает в DataGridView. Это было бы идеально. Если пользователь перемещает столбцы в DataGridView, DataTable должен отражать это изменение.

Любое понимание очень ценится, я буду рад предложить дополнительную информацию, если это необходимо. Спасибо!

С уважением, 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» могут появиться в любом порядке, и каждый элемент может появиться нулевым или один раз!

Видеть http://www.w3schools.com/schema/el_all.asp Для получения дополнительной информации.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top