C#: экспорт/импорт DataGridView в XML и HTML |
![]() |
Добавил(а) microsin | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Здесь будут рассмотрены простые примеры экспорта и импорта данных DataGridView с помощью классов XmlWriter и XmlReader. [Экспорт DataGridView в XML] В этом примере сделаем экспорт таблицы DataGridView в XML с помощью класса XmlWriter. Пример функции, которая сохранит DataGridView в XML: void SaveToXml(DataGridView dgv, String fn) { XmlWriter writer = null; try { XmlWriterSettings settings = new XmlWriterSettings(); settings.Indent = true; settings.IndentChars = ("\t"); settings.OmitXmlDeclaration = true; settings.Encoding = Encoding.UTF8; String tmpstr; writer = XmlWriter.Create(fn, settings); // Запись комментария: writer.WriteComment(" Пример генерации файла " + fn + " из таблицы DataGridView "); writer.WriteStartElement("table"); // Запись заголовка: tmpstr = ""; int columnidx = dgv.Columns.Count; foreach (DataGridViewColumn column in dgv.Columns) { tmpstr += column.HeaderText; if (columnidx > 1) tmpstr += ";"; columnidx--; } writer.WriteElementString("header", tmpstr); // Запись всех строк, итерация по сторокам DataGridViewRow: int rowidx = 0; foreach (DataGridViewRow row in dgv.Rows) { String ElementName = "row" + rowidx.ToString(); tmpstr = ""; columnidx = dgv.Columns.Count; // Запись элементов таблицы в строку с разделителем ';': foreach (DataGridViewCell column in row.Cells) { if (null != column.Value) tmpstr += column.Value.ToString(); if (columnidx > 1) tmpstr += ";"; columnidx--; } writer.WriteElementString(ElementName, tmpstr); rowidx++; } writer.WriteEndElement(); writer.Flush(); } finally { if (writer != null) writer.Close(); } } В результате получится вот такой файл: <!-- Пример генерации файла data.xml из таблицы DataGridView --> <table> <header>Время;Тест;Уст. (мА);Счит. (мА);Точн.;Результат</header> <row0>;Начало теста;;;;</row0> <row1>13:37:46;Тест 1;;;;</row1> <row2>13:38:12;;4.69;4.70;0.0%;ON</row2> <row3>13:38:44;;3.23;3.30;0.0%;OFF</row3> <row4>13:38:44;Тест 2;;;;</row4> <row5>13:39:07;;4.70;4.70;0.0%;ON</row5> <row6>13:39:42;;3.24;3.20;-3.0%;OFF</row6> <row7>13:39:43;Тест 3;;;;</row7> <row8>13:40:06;;4.70;4.70;0.0%;ON</row8> <row9>13:40:37;;3.20;3.20;-3.0%;OFF</row9> <row10>;Время теста 00:02:51;;;;</row10> </table> Пример функции, которая загружает в DataGridView содержимое файла XML: void LoadFromXml(ref DataGridView dgv, String fn) { XmlReader reader = null; dgv.Rows.Clear(); int rowidx = 0; try { XmlReaderSettings settings = new XmlReaderSettings(); reader = XmlReader.Create(fn, settings); while (reader.Read()) { switch (reader.NodeType) { case XmlNodeType.Comment: logfile.write(String.Format("Комментарий: {0}", reader.Value)); break; case XmlNodeType.Element: if ("header" == reader.Name) { reader.Read(); logfile.write("Заголовок: "+ reader.Value); } break; case XmlNodeType.Text: String[] words; words = reader.Value.Split(new char[] { ';' }); dgv.Rows.Add(); int colidx = 0; foreach (String str in words) { dgv.Rows[rowidx].Cells[colidx].Value = str; colidx++; } dgv.CurrentCell = dgv.Rows[rowidx].Cells[0]; dgv.CurrentCell.Selected = false; rowidx++; break; //case XmlNodeType.EndElement: // logfile.write(String.Format("End Element {0}", reader.Name)); // break; //default: // logfile.write("Other node " + reader.NodeType.ToString() // + " with value " + reader.Value.ToString()); // break; } } } finally { if (reader != null) reader.Close(); } } [Экспорт DataGridView в HTML] Вы наверное догадались, что таким же способом можно легко создавать файлы в формате HTML. И неудивительно, ведь HTML это частный случай XML. Пример: void SaveToHtml(DataGridView dgv, String fn) { XmlWriter writer = null; try { XmlWriterSettings settings = new XmlWriterSettings(); settings.Indent = true; settings.IndentChars = ("\t"); settings.OmitXmlDeclaration = true; settings.Encoding = Encoding.UTF8; writer = XmlWriter.Create(fn, settings); // Запись комментария: writer.WriteComment(" Пример генерации файла " + fn + " из таблицы DataGridView "); writer.WriteStartElement("table"); writer.WriteStartElement("tbody"); // Запись заголовка таблицы HTML: writer.WriteStartElement("tr"); foreach (DataGridViewColumn column in dgv.Columns) { writer.WriteElementString("th", column.HeaderText); } writer.WriteEndElement(); // закрытие тега tr // Запись всех строк: foreach (DataGridViewRow row in dgv.Rows) { writer.WriteStartElement("tr"); foreach (DataGridViewCell column in row.Cells) { if (null != column.Value) writer.WriteElementString("td", column.Value.ToString()); else writer.WriteElementString("td", " "); } writer.WriteEndElement(); // закрытие тега tr } writer.WriteEndElement(); // закрытие тега tbody writer.WriteEndElement(); // закрытие тега table writer.Flush(); } finally { if (writer != null) writer.Close(); } } Получится вот такая таблица: <!-- Пример генерации файла data.html из таблицы DataGridView --> <table> <tbody> <tr> <th>Время</th> <th>Тест</th> <th>Уст. (мА)</th> <th>Счит. (мА)</th> <th>Точн.</th> <th>Результат</th> </tr> <tr> <td /> <td>Начало теста</td> <td /> <td /> <td /> <td /> </tr> <tr> <td>13:37:46</td> <td>Тест 1</td> <td /> <td /> <td /> <td /> </tr> ... <tr> <td /> <td>Время теста 00:02:51</td> <td /> <td /> <td /> <td /> </tr> </tbody> </table> К формируемым тегам с помощью метода WriteAttributeString можно добавлять атрибуты, что позволяет форматировать текст и таблицу: ... writer.WriteStartElement("table"); writer.WriteAttributeString("border", "0"); writer.WriteAttributeString("cellspacing", "1"); writer.WriteAttributeString("cellpadding", "3"); writer.WriteAttributeString("bgcolor", "#8cacbb"); writer.WriteStartElement("tbody"); // Запись заголовка таблицы HTML: writer.WriteStartElement("tr"); writer.WriteAttributeString("style", "background-color: #dee7ec;"); foreach (DataGridViewColumn column in dgv.Columns) { writer.WriteElementString("th", column.HeaderText); } writer.WriteEndElement(); // закрытие тега tr // Запись всех строк: int rowstart = 0; int rowidx = rowstart; int rowend = dgv.Rows.Count - 1; foreach (DataGridViewRow row in dgv.Rows) { writer.WriteStartElement("tr"); writer.WriteAttributeString("style", "background-color: #ffffff;"); foreach (DataGridViewCell column in row.Cells) { if (null != column.Value) { writer.WriteStartElement("td"); if ("ON" == column.Value.ToString()) writer.WriteAttributeString("style", "color: #00ff00;"); else if ("OFF" == column.Value.ToString()) writer.WriteAttributeString("style", "color: #ffa000;"); if (rowidx == rowstart || rowidx == rowend) { writer.WriteStartElement("b"); writer.WriteStartElement("i"); } writer.WriteString(column.Value.ToString()); if (rowidx == rowstart || rowidx == rowend) { writer.WriteEndElement(); // закрытие тега i writer.WriteEndElement(); // закрытие тега b } writer.WriteEndElement(); // закрытие тега td } else writer.WriteElementString("td", " "); } writer.WriteEndElement(); // закрытие тега tr rowidx++; } writer.WriteEndElement(); // закрытие тега tbody writer.WriteEndElement(); // закрытие тега table writer.Flush(); ... Конечный результат экспорта в HTML:
[Ссылки] |