C# 如何通过代码在数据网格视图上选择和删除多行?

C# 如何通过代码在数据网格视图上选择和删除多行?,c#,datagridview,C#,Datagridview,这是我的密码,这是一本简单的电话簿,这是它的一部分 private void btnDeleteFromGV_Click(object sender, EventArgs e) { try { dataGridView1.Rows.RemoveAt(dataGridView1.SelectedRows[0].Index); } catch (Exception) {

这是我的密码,这是一本简单的电话簿,这是它的一部分

      private void btnDeleteFromGV_Click(object sender, EventArgs e)
    {
        try
        {
            dataGridView1.Rows.RemoveAt(dataGridView1.SelectedRows[0].Index);
        }
        catch (Exception)
        {
            MessageBox.Show("PLS Enter a Row");
        }  
    }
我希望在数据网格视图中同时选择两行或多行,并能够删除它们


我该怎么办

不幸的是,我无法完全理解需要什么,但我将把它留在这里,也许有人会发现它有用。 1要删除DataGridView中属性为:RowHeadService=true、SelectionMode=RowHeaderSelect、Multiselect=true的行,请用鼠标选择并按下按钮,您可以使用以下代码:

必须通过单击任何行标题来选择行 2要删除DataGridView中属性为:RowHeadService=false、Multiselect=true的行,请使用鼠标选择并按下按钮,您需要设置SelectionMode=FullRowSelect。代码将与1相同。 3要删除DataGridView中属性为:RowHeadService=false/true、SelectionMode=FullRowSelect/RowHeaderSelect、Multiselect=true的行,请在按下按钮后根据特殊条件使用以下代码:

private void button1_Click(object sender, EventArgs e)
    {
        for (int i = 0; i < dataGridView1.RowCount; i++)    // loop's start to check condition
        {
            for (int j = 0; j < dataGridView1.ColumnCount; j++)
            {
                if (Convert.ToInt32(dataGridView1.Rows[i].Cells[j].Value) == -1) // example of condition
                {
                    dataGridView1.Rows[i].Selected = true;
                    break;
                }
            }
        }
        int selectedCount = dataGridView1.SelectedRows.Count;
        while (selectedCount > 0)
        {
            if (!dataGridView1.SelectedRows[0].IsNewRow)
                dataGridView1.Rows.RemoveAt(dataGridView1.SelectedRows[0].Index);
            selectedCount--;
        }
        dataGridView1.ClearSelection();
    }

不幸的是,我不能完全理解需要什么,但我将把它留在这里,也许有人会发现它有用。 1要删除DataGridView中属性为:RowHeadService=true、SelectionMode=RowHeaderSelect、Multiselect=true的行,请用鼠标选择并按下按钮,您可以使用以下代码:

必须通过单击任何行标题来选择行 2要删除DataGridView中属性为:RowHeadService=false、Multiselect=true的行,请使用鼠标选择并按下按钮,您需要设置SelectionMode=FullRowSelect。代码将与1相同。 3要删除DataGridView中属性为:RowHeadService=false/true、SelectionMode=FullRowSelect/RowHeaderSelect、Multiselect=true的行,请在按下按钮后根据特殊条件使用以下代码:

private void button1_Click(object sender, EventArgs e)
    {
        for (int i = 0; i < dataGridView1.RowCount; i++)    // loop's start to check condition
        {
            for (int j = 0; j < dataGridView1.ColumnCount; j++)
            {
                if (Convert.ToInt32(dataGridView1.Rows[i].Cells[j].Value) == -1) // example of condition
                {
                    dataGridView1.Rows[i].Selected = true;
                    break;
                }
            }
        }
        int selectedCount = dataGridView1.SelectedRows.Count;
        while (selectedCount > 0)
        {
            if (!dataGridView1.SelectedRows[0].IsNewRow)
                dataGridView1.Rows.RemoveAt(dataGridView1.SelectedRows[0].Index);
            selectedCount--;
        }
        dataGridView1.ClearSelection();
    }

将最初选定的行放到数组中,然后将其从gridview中删除。试试这个:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        dataGridView1.MultiSelect = true;
        dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
    }

    private void button1_Click(object sender, EventArgs e)
    {
        var selectedRows = dataGridView1.SelectedRows
            .OfType<DataGridViewRow>()
            .Where(row => !row.IsNewRow)
            .ToArray();

        foreach (var row in selectedRows)
            dataGridView1.Rows.Remove(row);

        dataGridView1.ClearSelection();
    }
}
删除前选定的行:

按下按钮后:

将最初选择的行放到数组中,然后将它们从gridview中删除。试试这个:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        dataGridView1.MultiSelect = true;
        dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
    }

    private void button1_Click(object sender, EventArgs e)
    {
        var selectedRows = dataGridView1.SelectedRows
            .OfType<DataGridViewRow>()
            .Where(row => !row.IsNewRow)
            .ToArray();

        foreach (var row in selectedRows)
            dataGridView1.Rows.Remove(row);

        dataGridView1.ClearSelection();
    }
}
删除前选定的行:

按下按钮后:

您可以在DB中写入列Id而不是单元格[4]:列Id


您可以在DB中写入而不是单元格[4]:列Id。

它可以工作,但首先有两个问题:我必须为if语句IFselected.rows0或1或2或….中的每个条件编写代码。。。。。第二个是我的例外在这种情况下上升@agasi@MostafaBouzari请您详细解释一下问题是什么,您希望达到什么效果?@MostafaBouzari Ok。问题是如何通过代码多选择DataGridView。我想我问了那个问题。如果你想让我的代码符合你的需要,我需要理解这个洞的任务。你能添加更多信息或更正确地创建新问题并关闭此问题吗?我还需要知道如何在一个操作中删除多行@agasi它总是删除3行@agasi它可以工作,但首先有两个问题:我必须在if语句IFselected.rows0或1或2或….中为每个条件编写代码。。。。。第二个是我的例外在这种情况下上升@agasi@MostafaBouzari请您详细解释一下问题是什么,您希望达到什么效果?@MostafaBouzari Ok。问题是如何通过代码多选择DataGridView。我想我问了那个问题。如果你想让我的代码符合你的需要,我需要理解这个洞的任务。你能添加更多信息或更正确地创建新问题并关闭此问题吗?我还需要知道如何在一个操作中删除多行@agasi它总是删除3行@agasit这将删除所有行,因为当最后一行被删除时,下一行将被自动选中。@msmolcic它不会删除我所选的行selected@MostafaBouzari不知道你说的是什么意思。它将删除所有高亮显示的行,不是吗?必须使RowHeadersVisible=true并仅通过单击RowHeaders来选择行,然后它将被删除。否则,如果RowHeaders可见,则需要使用FullRowSelect模式=false@agasi这正是我想要做的。这将删除所有行,因为当删除最后一个选定行时,下一行将自动被选中。@msmolcic它不会删除我拥有的选定行selected@MostafaBouzari不知道你说的是什么意思。它将删除所有高亮显示的行,不是吗?必须使RowHeadersVisible=true并仅通过单击RowHeaders来选择行,然后它将被删除。否则,如果RowHeaders可见,则需要使用FullRowSelect模式=false@agasi这正是我想说的一般来说,最好在答案中包含解释和参考,而不仅仅是一段代码 你的答案中包含的信息和参考信息,而不仅仅是一段代码。
            using (var context = new DB())
            {
                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);
                }

                context.SaveChanges();