无法更新Xml文件

时间:2014-03-06 11:25:45

标签: c# .net xml

我正在尝试使用此代码更新我的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。使用此代码,我面临同样的问题。请仔细阅读此代码广告尝试建议修复。请。

1 个答案:

答案 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);