C # Использование наборов данных для чтения XML-файлов со сложными типами в datagridview - PullRequest
1 голос
/ 26 мая 2011

У меня есть код как таковой, который читает XML-файл в набор данных, а затем отображает данные в виде таблицы данных.
Я провел поиск в Google и обнаружил, что мой набор данных читается в xml, но только на первом «уровне» элементов.

Недостаточно далеко для сложных типов. Однако он сохраняет сложные типы или «встроенные» данные в следующую таблицу в наборе данных. Файл xml находится в одном наборе данных, но таблицы разбиваются в зависимости от сложных типов элементов.

Есть ли способ объединить таблицы в одну большую таблицу, чтобы мне не нужно было иметь числовые значения вверх и вниз для переключения между представлениями таблиц?

Для моей программы я пытаюсь упростить пользователю возможность манипулировать этими XML-файлами. Наличие одного большого стола было бы намного лучше, чем кучка меньших.

Вот код:

    string filename = Address.Text;
    dataGridView1.AutoGenerateColumns = true;
    DataSet dataSet1 = new DataSet("DEFAULT");
    dataSet1.ReadXml(filename, XmlReadMode.Auto);
    bindingSource1.DataSource = dataSet1.Tables[(int)tablenumber.value].DefaultView;
    dataGridView1.DataSource = bindingSource1;
    richTextBox1.Text = filename + " loaded.";
    label2.Text = "File Open: " + filename;

и так далее, но номер таблицы будет начинаться с 0. Это просто «первая» таблица, которую имеет набор данных при чтении в файле XML. Кроме того, у меня есть схема, которая идет с файлами XML. Нужно ли мне читать схему, чтобы она знала, что существует сложный тип, и будет читать в соответствии со схемой?

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

1 Ответ

1 голос
/ 31 мая 2011

Этот вопрос был решен с помощью цикла for, который перебирает каждую таблицу в наборе данных и объединяет ее. Это привело к большему объему данных, который подходит для представления данных независимо от схемы. Там были пустые клетки, что и ожидалось, но это было именно то, что я хотел: огромный набор данных.

    DataTable dt = new DataTable();
    dt = dataSet1.Tables[0];
    int i;
    for(i = 1; i < dataSet1.Tables.Count; i++)
    {
        dt.Merge(dataSet.Tables[i]);
    }

Был ли код, который я использовал. =)

Редактировать: дополнительная информация (ограничения, пример) Объединение таблиц

...