C# 如果DataGridView已为空,如何防止用户删除行?

C# 如果DataGridView已为空,如何防止用户删除行?,c#,asp.net,winforms,desktop-application,C#,Asp.net,Winforms,Desktop Application,在我的windows窗体应用程序中,我有一个类别窗体,其中包含不同的类别及其ID、名称和说明。该表单还包含用于不同操作的多个按钮,包括添加类别、编辑和删除类别 在某些情况下,如果categories DataGridView需要为空,我如何通知用户gridview已经为空,并且无法进一步删除。我想通过messagebox通知他,没有更多的行需要删除。下面是我在删除按钮上使用的代码 private void btnDelete_Click(object sender, EventArgs e)

在我的windows窗体应用程序中,我有一个类别窗体,其中包含不同的类别及其ID、名称和说明。该表单还包含用于不同操作的多个按钮,包括添加类别、编辑和删除类别

在某些情况下,如果categories DataGridView需要为空,我如何通知用户gridview已经为空,并且无法进一步删除。我想通过messagebox通知他,没有更多的行需要删除。下面是我在删除按钮上使用的代码

private void btnDelete_Click(object sender, EventArgs e)
    {
        if (dgvCategories.Rows.Count == 0)
        {
            DataAccess.WarnUser("No categories to delete.");
            txtCategoryName.Focus();
            return;
        }

        string categoryName = dgvCategories.CurrentRow.Cells[1].Value.ToString();
        if (DataAccess.AskUser("Are you sure want to delete this permanently?", "Confirm Deletion") == true)
        {
            string categoryId = dgvCategories.CurrentRow.Cells[0].Value.ToString();
            Categories.Delete(categoryId);
            FillGrid();
        }
    }
但我在这一行得到“对象引用未设置为对象的实例”错误。我做错了什么

string categoryName = dgvCategories.CurrentRow.Cells[1].Value.ToString();

我防止用户从DataGridView中删除已为空的行的方法是正确的,但我得到的对象引用未设置为对象错误的实例。我收到此错误是因为我使用Rows.Count==0而不是CurrentRow==0来验证当前行


正如@G_p所建议的,对于Rows.Count,我仍然接收到一行没有数据。但是,CurrentRow对我来说是有意义的,它验证了CurrentRow为null。

这不是你的代码已经在做的事情吗(假设
DataAccess.WarnUser()
显示一个消息框)?@Nico off这实际上是一个消息框,它将向我显示一条带有警告图标的消息。但我仍然得到{“Object reference not set to a instance of a Object.”错误,当网格已经为空时,我仍然单击delete按钮。然后您应该将此详细信息添加到您的问题中。还有,你从哪里得到这个例外?请检查此错误的帮助。另外,我不确定在网格不为空的情况下,
CurrentRow
是否可以
null
。最好检查
CurrentRow==null
。不是答案,而是针对不同解决方案的建议。在我的用户界面中的这种情况下,我更喜欢禁用不应单击的按钮。您可以在网格上挂接事件,当行数为0时,禁用按钮。该行上出现对象引用错误的原因可能是因为不存在行时没有当前行-您可以在该行上使用断点验证,并通过快速监视检查值。