C# DataGridView.SelectedRows.Count始终=0
我的应用程序中有一个datagridview。我希望能够选择一行或多行,然后右键单击并获得上下文菜单。上下文菜单中的选项将对所选行执行某些操作,例如隐藏它们。对于datagridview,我有multiselect=true和selectionmode=fullrowselect。由于某些原因,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)
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;
}