我正在尝试使用此代码更新我的xml文件。
int i;
XmlNodeList list = xdoc.SelectNodes("Sale/SalesLines/SalesLine");
foreach (XmlNode node in list)
{
for (i = 0; i < count; i++)
{
node.SelectSingleNode("VatAmount").InnerText = Convert.ToString(datagridview.Rows[i].Cells[10].Value);
xdoc.Save(path);
}
}
首先,我尝试使用网格中的整数数据更新xml文件。现在我的xml文件中有2个salesline节点。上面的代码确实更新了该节点中的值,但它将元素值设置为使用循环读取的最后一个元素。它读取两个值(文件中有2个值读取和更新),但只更新这两个节点中的最后一个读取值vatamount元素。 Btw计数保存网格中的行数。任何人都可以帮我解决这个问题我真的需要解决这个问题。
确定。伙计们请原谅我。我的同事看到了我的代码,他说不要使用该代码,而是使用它。
DevExpress.XtraGrid.Views.Grid.GridView view = (DevExpress.XtraGrid.Views.Grid.GridView)gridControl1.FocusedView;
view.PostEditor();
view.RefreshData();
DataTable table = ((DataView)gridView1.DataSource).ToTable();
foreach (DataRow dr in table.Rows)
{
//textBox8.Text += Convert.ToString(dr["NewVATAmt"]);
foreach (XmlNode node in list)
{
node.SelectSingleNode("VatAmount").InnerText = Convert.ToString(dr["NewVATAmt"]);
}
}
xdoc.Save(path);
所以我现在使用dev express grid控件而不是datagrid。使用此代码,我面临同样的问题。请仔细阅读此代码广告尝试建议修复。请。
答案 0 :(得分:0)
如果我理解你想要的是什么,那么你需要将一个计数器从foreach
循环中取出(不是循环内的循环)。这样的事情(注意你仍然应该检查Rows[i]
是否存在或者你得到一个例外)。
int i = 0;
foreach (XmlNode node in list)
{
node.SelectSingleNode("VatAmount").InnerText = Convert.ToString(datagridview.Rows[i].Cells[10].Value);
i++;
}
xdoc.Save(path);
此外,您可能只想在更新所有节点后保存文档一次。
更新:对于第二个样本,您应该遵循类似的模式。
DataTable table = ((DataView)gridView1.DataSource).ToTable();
int i = 0;
foreach (XmlNode node in list)
{
node.SelectSingleNode("VatAmount").InnerText = Convert.ToString(table.Rows[i]["NewVATAmt"]);
i++;
}
xdoc.Save(path);