如何重新加载创建到datagridview中的xml文件

时间:2015-03-02 09:48:26

标签: c# xml datagridview

我创建了该文件,但是当我尝试浏览并上传时,它无法加载回gridview,它显示错误"找不到表2"。我不知道该问题是什么,因为现在正在创建的文件不再与原始文件相同。原始文件表名称称为数据,创建文件后,表名称变为Table1

这是我写入文件的方式。 mybe关于最简单的写入文件的方法的任何建议都会有所帮助。

    private DataTable GetDataTableFromDataGridview(DataGridView _grid)
    {
      {
            var _oDataTable = new DataTable();
            object[] cellValues = new object[_grid.Columns.Count];
           _oDataTable.Columns.Add("Name", typeof(string));
            _oDataTable.Columns.Add("Value", typeof(string));
            _oDataTable.Columns.Add("Font", typeof(string));
            _oDataTable.Columns.Add("DateStamp", typeof(DateTime));
            _oDataTable.Columns.Add("Comment", typeof(string));
            foreach (DataGridViewRow row in _grid.Rows)
            {
                for (int i = 0; i < row.Cells.Count; i++)
                {
                    cellValues[i] = row.Cells[i].Value;   
                }
                _oDataTable.Rows.Add(cellValues.ToArray());
            }
            return _oDataTable;
        }         
    }

保存按钮

    private void btnSave_Click(object sender, EventArgs e)
    {
            string outputFilePath = txtInputfile.Text.Replace(_InputFileName, _OutFileName);
            XDocument doc = XDocument.Load(outputFilePath);

            DataTable dataTable = GetDataTableFromDataGridview(Gridview_Output);
            DataSet dataSet = new DataSet();
            dataSet.Tables.Add(dataTable);
            dataSet.WriteXml(outputFilePath);
            MessageBox.Show("New file created,testing ");
    }

原始文件

<data name="Label" xml:space="preserve">
<value></value>
<comment>[Font][/Font][DateStamp][/DateStamp][Comment][/Comment]</comment>
</data>
<data name="Exit_Button" xml:space="preserve">
<value></value>
<comment>[Font][/Font][DateStamp][/DateStamp][Comment][/Comment]</comment>
</data>
<data name="Exit_Verify_Message" xml:space="preserve">
<value></value>
<comment>[Font][/Font][DateStamp][/DateStamp][Comment][/Comment]</comment>
创建新文件后

结果

  <?xml version="1.0" standalone="yes"?>
  <NewDataSet>
  <Table1>
  <Name>FinEnrolment_CurrentSelectedUser_Label</Name>
  <Value>dfsd</Value>
  <Font>fdsf</Font>
  <DateStamp>2015-02-03T10:56:50+02:00</DateStamp>
  <Comment>dfd</Comment>
  </Table1>
  <Table1 />
</NewDataSe>

1 个答案:

答案 0 :(得分:2)

获得此结果的原因是注释标记的内容不是xml。

因此您必须将DataTable中的转换器编写为之前的resx文件结构。

所有这些都将通过我已经为您提供的课程来处理。

How do i get xml nodes from the xmlnodelist

我仍然无法弄清楚为什么你必须以这种方式(更复杂的方式)这样做。

如果你真的需要编写转换,它将如下所示:

private static void CopyValuesFromDataTableToXml(string fileName, DataTable table)
    {
        XmlDocument doc = new XmlDocument();
        doc.Load(fileName);
        foreach (DataRow row in table.Rows)
        {
            string name = (string)row["Name"];
            //fish out the element out of the xml
            XmlElement element = doc.SelectSingleNode(string.Format("//data[@name='{0}']", name)) as XmlElement;
            //set value
            element.SelectSingleNode("./value").InnerText = (string)row["Value"];
            //set comment
            element.SelectSingleNode("./comment").InnerText = 
                string.Format(
                "[Font]{0}[/Font][DateStamp]{1}[/DateStamp][Comment]{2}[/Comment]",
                row["Font"],
                row["DateStamp"],
                row["Comment"]);
        }

        //here would belong the code to update the version

        doc.Save(fileName);
    }