2016-11-07 5 views
-1

Wie kann ich Click/Cursor auf leere Zeilen in DataGridView deaktivieren? Ich habe abwechselnd Zeilen, eine mit Daten und eine andere leere, dann Zeile mit Daten und dann eine leere Zeile. Ich möchte deaktivieren klicken Sie nur auf leere/null Zeilen.So deaktivieren Sie klicken Sie auf leere Zeilen in DataGridView

Ich habe meinen Code dank Brise verbessert und teilweise bekommen, was ich wollte, aber das gilt offensichtlich für jede Zelle. Wie kann ich diesen Code so implementieren, dass der ReadOnly-Modus nur für vollständig leere Zeilen gilt und nicht für Zeilen, in denen sogar eine einzelne Zelle Daten enthält?

private void dataGridView3_CellMouseEnter(object sender, DataGridViewCellEventArgs e) 
    { 
     if (e.ColumnIndex < 0 || e.RowIndex < 0) 
     { 
      return; 
     } 
     var dataGridView = (sender as DataGridView); 
     try 
     { 
      int col = e.ColumnIndex; 
      int row = e.RowIndex; 
      var cell = ((DataGridView)sender)[col, row]; 
      if (cell != null && cell.Value != "") 
      { 
       dataGridView.Cursor = Cursors.Hand; 
      } 
      else 
      { 
       dataGridView.Cursor = Cursors.No; 
       dataGridView.ReadOnly = true; 
      } 

     } 
     catch (Exception es) 
     { 
      MessageBox.Show(es.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Information); 
     } 

    } 

Vielen Dank für Ihre Hilfe ..

+0

Obligatorisch "Was haben Sie versucht?" Bitte posten Sie Ihren Code. –

+0

Obligatorisch "Was möchten Sie erreichen?": Sie können den Benutzer nicht daran hindern zu klicken. Welchen Unterschied möchten Sie in Ihrem Programm erreichen, wie er den Klick behandelt? – Breeze

+0

Ich würde annehmen, dass Sie die Klickereignisse im Wesentlichen "ignorieren" möchten, wenn der Absender eine leere Zeile ist? –

Antwort

1

Der Trick besteht darin, nicht nur zu überprüfen, ob der Verweis auf die Zelle leer ist, sondern auch, ob der Wert der Zelle eine leere Zeichenfolge ist. Dazu erweitern Sie

if(cell != null) 

zu

if(cell != null && cell.Value != "") 

Die Überprüfung, ob cell ist null nicht wirklich notwendig ist, aber es schadet nicht und schützt Sie vor einige Fehler, die bei der weiteren Entwicklung passieren könnte.

+0

Dank Breeze habe ich es bekommen – Ryu

0

Dies sollte Sie dort ankommen. Dies muss möglicherweise für Ihre Instanz angepasst werden, und wahrscheinlich sollten Sie "! =" Verwenden, um einige Zeilen aus der Struktur zu entfernen.

internal void AllRows_OnClick(object sender, EventArgs e){ 
    int rowIndex = e.RowIndex;//Get Row that was clicked 
    DataGridViewRow row = dataGridView1.Rows[rowIndex];//update to Row 
    if (row.Cells[1].Value.ToString() == ""){ 
     //Do Nothing 
    }else{ 
     //Do Something 
    } 

} 
+0

Was ist "DataGridViewRow row = dataGridView1.Rows [rowIndex];" gut für? Und warum checkst du nur Zeilen [1] .Zellen [1]? – Nebr

+0

@Nebr DataGridViewRow gibt eine direkte Zeile an die Zeile, ich hätte das in die Anweisung hinzugefügt, ich werde es jetzt bearbeiten. – vipersassassin

+0

Ah, okay, jetzt ist es richtig. – Nebr

Verwandte Themen