当选择最后一行时,Datagridview的SelectedRows.Count始终为零

3
我有一个DataGridView控件,已将allow user to add row属性设置为false。同时,我也只允许在整行选择的情况下操作该控件。
用户可以通过工具栏上的“+”按钮向该控件添加行。这个DGV是通过将数据源拖到一个添加了绑定导航工具栏的表单上创建的。
我的问题是,当我编写删除行的代码时,我进行了检查。
private void bindingNavigatorDeleteItem_Click(object sender, EventArgs e)
{
    try
    {
        if (dgvUsers.SelectedRows.Count > 0 && dgvUsers.Rows[0].Selected)
            MessageBox.Show("You cannot remove the user admin");
        else
        {
            if (MessageBox.Show("Are you sure you want to remove the user?", "Confirm", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
            {
                int code = 0;

                UserService userService = new UserService();

                if (dgvUsers.SelectedRows.Count > 0)
                {
                    int selectedrowindex = dgvUsers.SelectedCells[0].RowIndex;

                    DataGridViewRow selectedRow = dgvUsers.Rows[selectedrowindex];

                    code = (int)(selectedRow.Cells[0].Value);

                    if (GlobalClass.SessionId == "admin")
                    {
                        userService.RemoveUsers(code);
                    }
                    else
                        MessageBox.Show("Only username 'admin' can remove users");
                }
            }
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

当我选择最后一行进行删除时,SelectedRows.Count = 0。但当我选择其他任何行时,它都是“1”。为什么会这样?

没有代码很难找出你的问题。你是如何添加这些行的?请发布你的代码。 - Arin Ghazarian
@Arin Ghazarian。已编辑。 - Kinyanjui Kamau
@chiapa。当我选择除最后一行以外的任何其他行时,selectedrows.count = 1。当我选择最后一行时,selectedrows.count = 0。 - Kinyanjui Kamau
当您选择最后一行时,它是否会被突出显示(除非您未修改此行为)?您确定没有任何更改选择的事件吗? - etaiso
最后一行被突出显示。我没有任何更改选择的事件。 - Kinyanjui Kamau
显示剩余4条评论
1个回答

9

请检查"SelectionMode"属性是否设置为FullRowSelect?

在MSDN中写道:

"必须将SelectionMode属性设置为FullRowSelect或RowHeaderSelect,才能使用SelectedRows属性填充选定的行。"


正如我在问题中所述,它被设置为FullRowSelect。 - Kinyanjui Kamau
真的没有更多的代码可以展示了。我通过将用户数据源拖到表单上创建了DGV。绑定导航器和“+”按钮会自动创建一行。我从Visual Studio的属性窗口中设置了FullRowSelect。 - Kinyanjui Kamau
你能检查一下是否将“Selected”属性设置为最后一行的true吗?我的意思是通过编程方式选择它,然后检查“SelectedRows.Count”。 - Atanas Desev
当我单击最后一行的删除按钮时,即使代码还没有到达try{行,该行也会消失。因此,当我以编程方式选择最后一行时,会返回一个越界错误。为什么单击后会移除该行? - Kinyanjui Kamau
你可以使用DataGridViewCellEventArgs代替EventArgs来获取选择的行 -> int cRow =dgvUsers.Rows[e.RowIndex]; 你可以检查e.RowIndex来知道是否有选中的行。 - Atanas Desev
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接