Как экспортировать данные gridview в xml - PullRequest
0 голосов
/ 27 мая 2020

Привет, я пытаюсь сохранить сетку данных в файл XML с помощью XDocument, но проблема в том, что когда я нажимаю кнопку экспорта, сетка данных очищается, а экспортированный файл XML пуст

Эта кнопка заполняет datagridview из нескольких текстовых полей:

 private void add_Click(object sender, EventArgs e)
 {
     int n = dataGridView1.Rows.Add();

     dataGridView1.Rows[n].Cells[0].Value = txtOne.Text;
     dataGridView1.Rows[n].Cells[1].Value = txtTwo.Text;
     dataGridView1.Rows[n].Cells[2].Value = txtThree.Text; 
 }

Эта кнопка для экспорта как XML:

private void Export_Click(object sender, EventArgs e)
{

const string FILENAME = @"c:\temp\test.xml";
XDocument doc = new XDocument(
new XDeclaration("1.0", "ISO-8859-1", null),
new XElement("root",    
    dt.AsEnumerable().Select(row => new XElement("child", new object[]{
            new XElement("one",row[0]),
            new XElement("two",row[1]),
            new XElement("three",row[2]),
            }));


dataGridView1.DataSource = dt;
doc.Save(FILENAME);
SaveFileDialog saveFileDialog1 = new SaveFileDialog();
saveFileDialog1.InitialDirectory = Convert.ToString(Environment.SpecialFolder.MyDocuments);
saveFileDialog1.Filter = "File Name |*.xml";
saveFileDialog1.FilterIndex = 1;
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
    doc.Save(saveFileDialog1.FileName);
}

1 Ответ

0 голосов
/ 27 мая 2020

Если вы хотите прочитать все данные из DataGridView и экспортировать в XDocument, вам нужно использовать два цикла для чтения всех строк и всех ячеек.

private void ExportButton_Click(object sender, EventArgs e)
{
    var columnHeaders = (from DataGridViewColumn column in dataGridView1.Columns select column.HeaderText).ToArray();

    var xDoc = new XDocument(
        new XDeclaration("1.0", "ISO-8859-1", null),
        new XElement("root"));

    foreach (DataGridViewRow row in dataGridView1.Rows)
    {
        if (row.IsNewRow)
            continue;

        var xRow = new XElement("row");

        foreach (DataGridViewCell cell in row.Cells)
        {
            xRow.Add(new XElement(columnHeaders[cell.ColumnIndex], cell.Value));
        }

        xDoc.Element("root")?.Add(xRow);
    }

    xDoc.Save(@"d:\tmp\test.xml");
}

Если хотите, вы можете добавить saveFileDialog и установите имя файла из диалога

...