C# DataGridView.SelectedRows.Count始终=0

C# DataGridView.SelectedRows.Count始终=0,c#,datagridview,C#,Datagridview,我的应用程序中有一个datagridview。我希望能够选择一行或多行,然后右键单击并获得上下文菜单。上下文菜单中的选项将对所选行执行某些操作,例如隐藏它们。对于datagridview,我有multiselect=true和selectionmode=fullrowselect。由于某些原因,datagridview.selectedrows.count始终为=0。为什么会这样?这是代码 private void Form1_Load(object sender, EventArgs e)

我的应用程序中有一个datagridview。我希望能够选择一行或多行,然后右键单击并获得上下文菜单。上下文菜单中的选项将对所选行执行某些操作,例如隐藏它们。对于datagridview,我有multiselect=true和selectionmode=fullrowselect。由于某些原因,datagridview.selectedrows.count始终为=0。为什么会这样?这是代码

 private void Form1_Load(object sender, EventArgs e)
    {
        Image img = null;
        contextMenuStrip1.Items.Add("Hide selected", img, new System.EventHandler(contextMenuStrip1_Click));
        contextMenuStrip1.Items.Add("Unhide all", img, new System.EventHandler(contextMenuStrip1_Click));
        dataGridView1.ContextMenuStrip = contextMenuStrip1;
    }   

   private void contextMenuStrip1_Click(object sender, EventArgs e)
    {
        switch (sender.ToString().Trim())
        {
            case "Hide selected":
                //Necessary because a row with the current cell cannot be hidden.
                dataGridView1.CurrentCell = null;
                int count = dataGridView1.SelectedRows.Count;
                foreach (DataGridViewRow row in dataGridView1.SelectedRows)
                {
                    row.Visible = false;
                }
                break;

            case "Unhide all":
                foreach (DataGridViewRow row in dataGridView1.Rows)
                {
                    row.Visible = true;
                }
                break;
        }

    }

好的,我已经设置了一个快速项目来复制您的问题。问题是您正在将dataGridView1.CurrentCell设置为null。执行此操作时,将清除栅格视图中的选定行。我注意到你在那里有一个评论,它一定在那里。我不能完全确定所有的逻辑和业务领域,但您需要找到另一种方法。使用此代码,我在获取所选行时没有问题:


好的,我已经设置了一个快速项目来复制您的问题。问题是您正在将dataGridView1.CurrentCell设置为null。执行此操作时,将清除栅格视图中的选定行。我注意到你在那里有一个评论,它一定在那里。我不能完全确定所有的逻辑和业务领域,但您需要找到另一种方法。使用此代码,我在获取所选行时没有问题:


好的,我已经设置了一个快速项目来复制您的问题。问题是您正在将dataGridView1.CurrentCell设置为null。执行此操作时,将清除栅格视图中的选定行。我注意到你在那里有一个评论,它一定在那里。我不能完全确定所有的逻辑和业务领域,但您需要找到另一种方法。使用此代码,我在获取所选行时没有问题:


好的,我已经设置了一个快速项目来复制您的问题。问题是您正在将dataGridView1.CurrentCell设置为null。执行此操作时,将清除栅格视图中的选定行。我注意到你在那里有一个评论,它一定在那里。我不能完全确定所有的逻辑和业务领域,但您需要找到另一种方法。使用此代码,我在获取所选行时没有问题:


如果不想隐藏当前单元格,可以在遍历行时进行检查,查看发件人单元格是否在该行中,然后跳过该行。谢谢!我创建了一个新的DataGridViewSelectedRowCollection,并将其设置为dataGridView1.SelectedRows。然后我将dataGridView1.CurrentCell置为空,这样就可以隐藏当前单元格所在的行。如果不想隐藏当前单元格,可以在遍历行时进行检查,查看发送单元格是否在该行中,并跳过该行。谢谢!我创建了一个新的DataGridViewSelectedRowCollection,并将其设置为dataGridView1.SelectedRows。然后我将dataGridView1.CurrentCell置为空,这样就可以隐藏当前单元格所在的行。如果不想隐藏当前单元格,可以在遍历行时进行检查,查看发送单元格是否在该行中,并跳过该行。谢谢!我创建了一个新的DataGridViewSelectedRowCollection,并将其设置为dataGridView1.SelectedRows。然后我将dataGridView1.CurrentCell置为空,这样就可以隐藏当前单元格所在的行。如果不想隐藏当前单元格,可以在遍历行时进行检查,查看发送单元格是否在该行中,并跳过该行。谢谢!我创建了一个新的DataGridViewSelectedRowCollection,并将其设置为dataGridView1.SelectedRows。然后我将dataGridView1.CurrentCell置为空,这样就可以隐藏当前单元格所在的行。
switch (sender.ToString().Trim())
    {
        case "Hide selected":
            int count = dataGridView1.SelectedRows.Count;
            foreach (DataGridViewRow row in dataGridView1.SelectedRows)
            {
                row.Visible = false;
            }
            break;

        case "Unhide all":
            foreach (DataGridViewRow row in dataGridView1.Rows)
            {
                row.Visible = true;
            }
            break;
    }