我创建了该文件,但是当我尝试浏览并上传时,它无法加载回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>
答案 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);
}