我有一个在datagridview中删除右键单击删除单行的功能..
代码:
private void dataGridView1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
var hti = dataGridView1.HitTest(e.X, e.Y);
if (hti.RowIndex != -1)
{
dataGridView1.ClearSelection();
dataGridView1.Rows[hti.RowIndex].Selected = true;
}
}
}
private void DeleteRow_Click(object sender, EventArgs e)
{
Int32 rowToDelete = dataGridView1.Rows.GetFirstRow(DataGridViewElementStates.Selected);
if (rowToDelete != -1)
{
dataGridView1.Rows.RemoveAt(rowToDelete);
dataGridView1.ClearSelection();
}
}
但现在我想在选择时删除多行 首先我不知道为什么我不能选择多行 其次我想使用删除按钮删除多个删除并右键单击鼠标删除。
有人可以帮助我吗?
答案 0 :(得分:10)
编辑:
看看你的代码。您正在根据HitTest
方法的结果设置所选行。 DataGridView
属性SelectedRows
将确定选择哪些行。不确定为什么需要执行HitTest
,但是你可能还没有完全解释所需的功能。
if (e.Button == MouseButtons.Right)
{
var hti = dataGridView1.HitTest(e.X, e.Y);
if (hti.RowIndex != -1)
{
dataGridView1.ClearSelection();
dataGridView1.Rows[hti.RowIndex].Selected = true;
}
}
确保数据网格上的MultiSelect
属性设置为true
。
然后,您可以选择使用SelectedRows
属性:
foreach (DataGridViewRow row in DataGridView1.SelectedRows)
{
DataGridView1.Rows.Remove(row);
}
答案 1 :(得分:3)
请注意以下情况:
如果你需要删除datagrid中的记录, 不要只将rowIndex存储在datagrid中(而应将相应的密钥存储在DB中):
例如:我想删除datagrid中的第1行和第2行,我将它们的rowIndex存储在datagrid中。 在datagrid中删除第1行之后,第2行中的数据将向上移动到第1行,并且 第3行中的数据将向上移动到第2行, 因为您正在使用datagrid rowIndex来定位要删除的数据,因此, 结果:data1和data3最终将被删除。
答案 2 :(得分:0)
foreach (DataGridViewRow row in dgShow.SelectedRows)
{
string id = row.Cells[4].Value.ToString();
int x = Convert.ToInt16(id);
var del = context.ServicesPrice.Where(current => current.Id == x).FirstOrDefault();
context.ServicesPrice.Remove(del);
}
您可以编写而不是单元格[4]:数据库中的列ID。