我在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();
}
我希望代码只删除按钮点击事件
上的一个选定行答案 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;
}
现在在您的删除处理程序中,您知道要删除哪一行。