如何在Windows应用程序中使用c#从datagridview中删除一行

时间:2015-04-24 09:45:08

标签: c# xml datagridview

我在xml中有一个数据库我的xml文件是:

      <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
          <!--This is an XML Generated File-->
       <Categories>
         <Category>
          <CategoryId>1</CategoryId>
          <CategoryName>jitu</CategoryName>
         </Category>
         <Category>
          <CategoryId>2</CategoryId>
          <CategoryName>ansul</CategoryName>
         </Category>
         <Category>
          <CategoryId>3</CategoryId>
          <CategoryName>satish</CategoryName>
         </Category>
         <Category>
          <CategoryId>4</CategoryId>
          <CategoryName>tipu</CategoryName>
         </Category>
     </Categories>

我的c#代码用于从DataGridView和xml文件中删除一行。但是如果我从DataGridView中选择任何行并按下删除按钮,我的代码总是删除第一行。

 private void btnDelete_Click(object sender, EventArgs e)
     {           
        XmlDocument xdoc = new XmlDocument();
        string PATH = "xmldata.xml";

        ds.Clear();
        dtgvCategory.Refresh();
        ds.ReadXml(PATH);
        row = ds.Tables[0].Rows[0];
        int selectedRow = dtgvCategory.SelectedRows.Count;
        if (selectedRow > 0)
        {
            row.Delete();
        }

        ds.WriteXml(PATH);
        ds.AcceptChanges();
    }

我希望代码只删除按钮点击事件enter image description here

上的一个选定行

2 个答案:

答案 0 :(得分:1)

您当前的代码始终选择索引0处的行row,这就是为什么它总是删除DataGridView中的第一行。

您想改为get row index of currently selected cell,您可以尝试从CurrentCell.RowIndex属性获取它。此时,您将能够删除该索引处的行:

int selectedRow = dtgvCategory.SelectedRows.Count;
if (selectedRow > 0)
{
    selectedRowIndex = dtgvCategory.CurrentCell.RowIndex;
    row = ds.Tables[0].Rows[selectedRowIndex];
    row.Delete();
}

答案 1 :(得分:0)

您可以在使用RowStateChanged选择行时添加事件处理程序:

public int SelectedRow = 0;

private void dtgvCategory_RowStateChanged(object sender, DataGridViewRowStateChangedEventArgs e)
    {
        // return if not StateChanged
        if (e.StateChanged != DataGridViewElementStates.Selected) return;

        // then you could put that row in a public variable
        SelectedRow = e.Row.Index;
    }

现在在您的删除处理程序中,您知道要删除哪一行。

https://msdn.microsoft.com/en-us/library/system.windows.forms.datagridviewrowstatechangedeventargs%28v=vs.110%29.aspx