C# 单击“删除”按钮后,从Datagridview和XML节点中删除所选行
目前,当用户高亮显示整行并选择delete按钮时,代码会从Datgridview中删除该行,但不会从XML文件中删除该行。所以,如果我刷新页面,先前删除的行仍然显示为网格视图从XML加载数据,而该行尚未从中删除 下面是XML的代码C# 单击“删除”按钮后,从Datagridview和XML节点中删除所选行,c#,xml,datagridview,C#,Xml,Datagridview,目前,当用户高亮显示整行并选择delete按钮时,代码会从Datgridview中删除该行,但不会从XML文件中删除该行。所以,如果我刷新页面,先前删除的行仍然显示为网格视图从XML加载数据,而该行尚未从中删除 下面是XML的代码 <?xml version="1.0" standalone="yes"?> <NewDataSet> <Contacts> <FirstName>s</FirstName> &l
<?xml version="1.0" standalone="yes"?>
<NewDataSet>
<Contacts>
<FirstName>s</FirstName>
<LastName>s</LastName>
<Address>s</Address>
<City>s</City>
<Postcode>s</Postcode>
<Number>s</Number>
</Contacts>
<Contacts>
<FirstName>w</FirstName>
<LastName>w</LastName>
<Address>w</Address>
<City>w</City>
<Postcode>w</Postcode>
<Number>w</Number>
</Contacts>
<Contacts>
<FirstName>
</FirstName>
<LastName>
</LastName>
<Address>
</Address>
<City>
</City>
<Postcode>
</Postcode>
<Number>
</Number>
</Contacts>
<Contacts>
<FirstName>dkd</FirstName>
<LastName>dkfskldf</LastName>
<Address>asdfasf</Address>
<City>dfs</City>
<Postcode>dd</Postcode>
<Number>dd</Number>
</Contacts>
</NewDataSet>
如果有任何帮助,我将不胜感激我没有时间启动IDE,但您能尝试交换两个主要代码块吗?通过在网格上调用
remove
,您可能无法再访问SelectedCells
。因此,请先尝试if
块,然后再尝试foreach
块。这可能与文件的权限有关。您是否尝试将其保存到其他文件/路径并验证是否进行了更改?我还想说,您还有一些其他问题需要解决。您的if
块仅尝试删除第一个选定项,而您的foreach
块删除了所有项。此外,您可以按姓氏任意搜索XML文件,但网格是按索引显式搜索的。如果XML文件中有任何项目具有相同的姓氏,它们都将被删除,即使它们没有被删除。我切换了两个块,程序现在删除了该行,并在消息框中显示了已删除行的姓氏,因此已取得进展。但是,它仍然没有从XML中删除,这表明存在错误。这是一个糟糕的做法,我使用姓氏作为主键,但是我希望首先让程序运行&可能会为每个元素添加唯一的ID号以进行迭代并删除。当从列表中删除5时,4,5,6;6变为5导致索引问题。所以,当删除时,总是从列表的末尾开始。因此,将foreach循环更改为for循环:for(int row=dgv_c.Count()-1;row>=0;row--){DataGridViewRow dgv_r=dgv_c[row];)
private void button2_Click(object sender, EventArgs e)
{
string Lname;
DataGridViewSelectedRowCollection dgv_rc = this.dataGridView1.SelectedRows;
foreach (DataGridViewRow dgv_r in dgv_rc)
{
this.dataGridView1.Rows.Remove(dgv_r);
}
if (dataGridView1.SelectedCells.Count > 0)
{
int selectedrowindex = dataGridView1.SelectedCells[0].RowIndex;
DataGridViewRow selectedRow = dataGridView1.Rows[selectedrowindex];
Lname = Convert.ToString(selectedRow.Cells["LastName"].Value);
XmlDocument xdoc = new XmlDocument();
xdoc.Load("Contacts.xml");
foreach (XmlNode xNode in xdoc.SelectNodes("Contacts"))
if (xNode.SelectSingleNode("LastName").InnerText == Lname) xNode.ParentNode.RemoveChild(xNode);
xdoc.Save("Contacts.xml");
DialogResult dialog = MessageBox.Show(Lname + "deleted");
}
}