| 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:
[Ссылки] |