Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 单击“删除”按钮后,从Datagridview和XML节点中删除所选行_C#_Xml_Datagridview - Fatal编程技术网

C# 单击“删除”按钮后,从Datagridview和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

目前,当用户高亮显示整行并选择delete按钮时,代码会从Datgridview中删除该行,但不会从XML文件中删除该行。所以,如果我刷新页面,先前删除的行仍然显示为网格视图从XML加载数据,而该行尚未从中删除

下面是XML的代码

    <?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");
            }


        }