2016-07-05 7 views
1

Ich will Datagridview-Zeile ausgewählt oder nicht überprüfen, wenn Formular Last ein paar Sachen zu tun, aber es funktioniert nicht für mich arbeiten, wenn Sie diesen Code verwenden:Kann nicht Datagridview-Zeile ausgewählt überprüfen oder nicht, wenn das Formular Last 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()); 
       } 
      } 

     } 

Wenn debugging, grdInvoiceDetails2.Rows.Count = 6, grdInvoiceDetails2.SelectedRows.Count = 1 Aber wenn ich auf keine Zeile geklickt habe, wird eine Ausnahme ausgelöst .Because grdInvoiceDetails2.CurrentCell = null.

+0

Sie müssen, wenn überprüfen (grdInvoiceDetails2.SelectedRows.Count> 0), dann können Sie grdInvoiceDetails2.CurrentCell nennen, sonst Sie null sehen, Ergebnis Ausnahme. Während Form_Load gibt es keine SelectedRows. Es passiert nur, wenn Sie auf die Zeile klicken oder SelectedRow festlegen. Aber das passiert lange nach Form_Load –

Antwort

0

Form.Load Ereignis tritt auf, bevor ein Formular zum ersten Mal angezeigt wird, alle Initialisierung geschieht diese Zeit. Es ist nicht ratsam, DataGridView spezifische Logik innerhalb Load Ereignis (die meisten Steuerelemente können immer noch initialisieren).

Ich würde vorschlagen, abonnieren Sie DataGridView.DataBindingComplete und spielen Sie mit Ihrer Logik.

dataGridView1.DataBindingComplete += dataGridView1_DataBindingComplete; 

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

Ich konnte DataBindingComplete Ereignis nicht finden. Wo ist es? Ich verwende .NET 4.5 – user3035133

+1

Haben Sie dies überprüft [https://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.databindingcomplete (v = vs.110) .aspx) –

+0

Ich sehe, aber ich kann diesen Code nicht verwenden, wenn ich auf die Schaltfläche Bearbeiten klicke, um Daten aus der DataGridView-Zeile zum Formular zu laden. Ich möchte nur überprüfen, ob der Benutzer nicht auf eine DataGridView-Zeile geklickt hat. – user3035133

Verwandte Themen