如何将创建的 xml 文件重新加载到数据网格视图中

How to reload the xml file created into the datagridview

我已经创建了文件,但是当我尝试浏览和上传它时它无法加载回 gridview,它显示 "Cannot find table 2" 的错误。我不知道是什么问题,因为现在正在创建的文件不再与原始文件相同。原始文件 table 命名其调用数据,创建文件后 table 名称变为 Table1

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

    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>

你得到这个结果是因为评论标签的内容不是xml.

因此您必须编写一个从 DataTable 到您之前拥有的 resx 文件结构的转换器。

所有这一切都将由我为您提供的 类 处理。

我仍然不明白为什么你必须以这种(更复杂的方式)方式执行此操作。

如果您真的必须编写转换,它看起来像这样:

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);
    }