Codeby web-security - новый курс от Codeby Security School

Представляем вашему вниманию новый курс от команды The Codeby - "Тестирование Веб-Приложений на проникновение с нуля". Общая теория, подготовка рабочего окружения, пассивный фаззинг и фингерпринт, Активный фаззинг, Уязвимости, Пост-эксплуатация, Инструментальные средства, Social Engeneering и многое другое. Подробнее ...


Как выполнить чтение xml файла с выводом данных в DataGridView?

В этой статье хочу показать на простом примере, как можно выполнить чтение xml файла с выводом данных в DataGridView.

И так для начала создадим Windows Forms приложение на языке c# и добавим на форму два элемента управления: кнопку и DataGridView.

элемент DataGridView

Затем создадим xml файл, который, к примеру, пускай содержит следующую структуру:

<friends>
<friend id="1">
<name>Александр</name>
<age>25</age>
</friend>
<friend id="2">
<name>Николай</name>
<age>26</age>
</friend>
</friends>

После чего добавим xml файл в проект.

Для работы с xml файлами и документами необходимо добавить строку:

using System.Xml.Linq;

На этом подготовительная часть закончена, переходим к решению задачи.

И так сначала добавим метод CreateTable, с помощью него мы создадим таблицу с тремя колонками: id, name и age, в которой будем хранить значения элементов и атрибутов, содержащихся в xml файле.

private DataTable CreateTable()
{
//создаём таблицу
DataTable dt = new DataTable("Friends");
//создаём три колонки
DataColumn colID = new DataColumn("Id", typeof(Int32));
DataColumn colName = new DataColumn("Name", typeof(String));
DataColumn colAge = new DataColumn("Age", typeof(Int32));
//добавляем колонки в таблицу
dt.Columns.Add(colID);
dt.Columns.Add(colName);
dt.Columns.Add(colAge);
return dt;
}

Затем создадим метод ReadXml, с помощью которого мы будем выполнять сразу два действия: чтение xml файла и заполнение таблицы данными.


Paranoid - курс от Codeby Security School

Представляем вашему вниманию курс от команды codeby - "Комплекс мер по защите персональных данных, анонимности в интернете и не только" Подробнее ...


private DataTable ReadXml()
{
DataTable dt = null;
try
{
//загружаем xml файл
XDocument xDoc = XDocument.Load(@"../../имя файла.xml");
//создаём таблицу
dt = CreateTable();
DataRow newRow = null;
//получаем все узлы в xml файле
foreach (XElement elm in xDoc.Descendants("friend"))
{
//создаём новую запись
newRow = dt.NewRow();
//проверяем наличие атрибутов (если требуется)
if (elm.HasAttributes)
{
//проверяем наличие атрибута id
if (elm.Attribute("id") != null)
{
//получаем значение атрибута
newRow["id"] = int.Parse(elm.Attribute("id").Value);
}
}
//проверяем наличие xml элемента name
if (elm.Element("name") != null)
{
//получаем значения элемента name
newRow["name"] = elm.Element("name").Value;
}
if (elm.Element("age") != null)
{
newRow["age"] = int.Parse(elm.Element("age").Value);
}
//добавляем новую запись в таблицу
dt.Rows.Add(newRow);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
return dt;
}

Таблица создана и заполнена. Теперь нам осталось только вывести данные в DataGridView.

private void button1_Click(object sender, EventArgs e)
{
dataGridView1.DataSource = ReadXml();
}

результат

вывод данных

Если же Вам не хочется самостоятельно описывать логику работы с xml файлом, то тогда Вы можете решить данную задачу более простым способом:

DataSet ds = new DataSet("Friends");
ds.ReadXml(@"..//..//имя файла.xml");
dataGridView1.DataSource = ds.Tables[0];

Вместо указания индекса таблицы, Вы так же можете указать имя таблицы, например:

dataGridView1.DataSource = ds.Tables["friend"];

В этом примере мы сначала выполняем чтение xml файла, а затем выводим данные в DataGridView. Только в отличие от предыдущего способа в данном примере мы используем метод ReadXml объекта класса DataSet.

Единственная проблема, которая появилась после выполнения выше описанного кода, заключается в том, что теперь у нас появился не верный порядок столбцов.

заполненная таблица

Всё-таки хотелось бы, чтобы колонка id была первой. Исправить это достаточно просто, например можно воспользоваться свойством DisplayIndex.

dataGridView1.Columns["id"].DisplayIndex = 0;
dataGridView1.Columns["name"].DisplayIndex = 1;
dataGridView1.Columns["age"].DisplayIndex = 2;

Новый порядок столбцов: id, name, age.

На этом всё, если есть вопросы, то оставляйте их в комментариях.

Читайте также:


Codeby Market от Сodeby

Мы запустили свой магазин CodebyMarket Equipment for InfoSec. Уже добавили RaspberryAlfa Long-RangeOrange PiArduino и многое другое. Купить Pentesting Devices