2016-07-05 57 views
1

我要检查的DataGridView行选择或没有时,窗体加载做一些东西,但使用此代码时,它并没有为我工作:无法检查的DataGridView行选择或没有时,窗体加载C#

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。

+0

您必须检查(grdInvoiceDetails2.SelectedRows.Count> 0),那么你可以调用grdInvoiceDetails2.CurrentCell,否则,你看空,结果是例外。在Form_Load期间,没有SelectedRows。只有当您点击该行或设置SelectedRow时才会发生这种情况。但是,在Form_Load – 2016-07-05 03:51:39

回答

0

Form.Load事件发生在首次显示表单之前,所有初始化都发生在那个时间。 不是建议将DataGridView内部的具体逻辑设置为Load事件(大多数控件还可能正在初始化)。

我建议订阅DataGridView.DataBindingComplete并玩你的逻辑。

dataGridView1.DataBindingComplete += dataGridView1_DataBindingComplete; 

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

之后很久,我无法找到DataBindingComplete事件。它在哪里?我正在使用.NET 4.5 – user3035133

+1

你检查了这个[链接](https://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.databindingcomplete(v = vs.110).aspx )? –

+0

我看到了,但是当我单击“编辑”按钮从DataGridView行加载数据以形成表单时,我无法使用此代码。我只是想检查用户是否没有点击任何DataGridView行,不做任何其他的加载数据来形成。 – user3035133