C# 表单加载C时无法检查DataGridView行是否选中#

C# 表单加载C时无法检查DataGridView行是否选中#,c#,datagridview,C#,Datagridview,我想在表单加载时检查DataGridView行是否选中以执行某些操作,但在使用以下代码时,它对我无效: private void btnEdit_Click(object sender, EventArgs e) { if (grdInvoiceDetails2.Rows.Count > 0 && grdInvoiceDetails2.SelectedRows.Count > 0) {

我想在表单加载时检查DataGridView行是否选中以执行某些操作,但在使用以下代码时,它对我无效:

 private void btnEdit_Click(object sender, EventArgs e)
        {
            if (grdInvoiceDetails2.Rows.Count > 0 && grdInvoiceDetails2.SelectedRows.Count > 0)
            {
                try
                {
                    Them = false;
                    var r = grdInvoiceDetails2.CurrentCell.RowIndex;
                    txtQty.Text = grdInvoiceDetails2.Rows[r].Cells[3].Value.ToString();
                    cboInvNo.SelectedValue = grdInvoiceDetails2.Rows[r].Cells[1].Value.ToString();
                    cboItemName.SelectedValue = grdInvoiceDetails2.Rows[r].Cells[2].Value.ToString();
                    cboItemName.Enabled = true;
                    cboInvNo.Enabled = false;
                    txtQty.Enabled = true;

                    btnSave.Enabled = true;
                    btnCancel.Enabled = true;
                    btnAdd.Enabled = false;
                    btnEdit.Enabled = false;
                    btnDelete.Enabled = false;
                    btnBack.Enabled = false;
                    LoadDataToCollection();


                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                }
            }

        }
调试时,grdInvoiceDetails2.Rows.Count=6,grdInvoiceDetails2.SelectedRows.Count=1 但是如果我没有单击任何一行,它将抛出一个异常。因为grdInvoiceDetails2.CurrentCell=null。

事件发生在窗体第一次显示之前,所有初始化都发生在该时间。不建议将
DataGridView
特定逻辑放在
Load
事件中(大多数控件仍可能正在初始化)

我建议你接受并玩弄你的逻辑

dataGridView1.DataBindingComplete += dataGridView1_DataBindingComplete;

private void dataGridView1_DataBindingComplete(object sender,
    DataGridViewBindingCompleteEventArgs e)
{
    // logic here.
}
事件在窗体第一次显示之前发生,此时所有初始化都会发生。不建议将
DataGridView
特定逻辑放在
Load
事件中(大多数控件仍可能正在初始化)

我建议你接受并玩弄你的逻辑

dataGridView1.DataBindingComplete += dataGridView1_DataBindingComplete;

private void dataGridView1_DataBindingComplete(object sender,
    DataGridViewBindingCompleteEventArgs e)
{
    // logic here.
}

您必须检查(grdInvoiceDetails2.SelectedRows.Count>0),然后才能调用grdInvoiceDetails2.CurrentCell,否则会看到null,结果是异常。在表单加载期间,没有选择的行。只有在单击行或设置SelectedRow时才会发生这种情况。但这种情况在表单加载后很久就会发生。您必须检查(grdInvoiceDetails2.SelectedRows.Count>0),然后才能调用grdInvoiceDetails2.CurrentCell,否则会看到null,结果是异常。在表单加载期间,没有选择的行。只有在单击行或设置SelectedRow时才会发生这种情况。但这发生在Form_LoadI找不到DataBindingComplete事件很久之后。它在哪里?我使用的是.NET 4.5。您检查了吗?我明白了,但当我单击“编辑”按钮将数据从DataGridView行加载到表单时,我无法使用此代码。我只是想检查用户是否没有单击任何DataGridView行“不做任何其他事情”将数据加载到窗体。您提到“我想在窗体加载时检查DataGridView行是否选中”所以我认为您想放置一些逻辑,如果您只是在单击“编辑”按钮时查找逻辑以检查行是否选中,只要使用
if(grdInvoiceDetails2.SelectedRows!=null&&grdInvoiceDetails2.SelectedRows.Count>0)
当我按照您的建议更改代码时,它不起作用,什么也没有发生。private void btnEdit_Click(对象发送者,事件参数){if(grdInvoiceDetails2.SelectedRows!=null&&grdInvoiceDetails2.SelectedRows.Count>0){//some stuff}。因为grdInvoiceDetails2.SelectedRows!=null始终返回true我找不到DataBindingComplete事件。它在哪里?我使用的是.NET 4.5。您检查了吗?我明白了,但当我单击“编辑”按钮将数据从DataGridView行加载到表单时,我无法使用此代码。我只是想检查用户是否没有单击任何DataGridView行“不做任何其他事情”将数据加载到窗体。您提到“我想在窗体加载时检查DataGridView行是否选中”所以我认为您想放置一些逻辑,如果您只是在单击“编辑”按钮时查找逻辑以检查行是否选中,只要使用
if(grdInvoiceDetails2.SelectedRows!=null&&grdInvoiceDetails2.SelectedRows.Count>0)
当我按照您的建议更改代码时,它不起作用,什么也没有发生。private void btnEdit_Click(对象发送者,事件参数){if(grdInvoiceDetails2.SelectedRows!=null&&grdInvoiceDetails2.SelectedRows.Count>0){//some stuff}。因为grdInvoiceDetails2.SelectedRows!=null总是返回true