如何将创建的 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);
}
我已经创建了文件,但是当我尝试浏览和上传它时它无法加载回 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);
}