2016-07-12 5 views
1

Ich habe eine DataGridView, wo die Zellen in einer Spalte verschiedene Zelltypen haben können.So vergleichen Sie eine Zelle mit DataGridViewCell CellType

Zum Beispiel hat die Zelle in Zeile 1 den Zelltyp DataGridViewTextBoxCell. Und die Zelle in Zeile 2 hat den Zelltyp DataGridViewImageCell.

Ich habe ein Verfahren geschaffen, das etwas tut, wenn die Maus über eine Zelle in dieser Spalte:

private void DataTableCellMouseEnter(object sender, DataGridViewCellEventArgs e) 
{ 
    if 
    (
     e.RowIndex >= 0 // If the current row is not the header. 
     && e.ColumnIndex == dataGridViewDMSSettings.Columns["Example"].Index // And if the current column is the example column. 
    ) 
    { 
     // Something happing here. 
    } 
} 

Jetzt mag ich eine comparsion des Zelltypen hinzuzufügen, um den Code auszuführen, nur wenn der Zelltyp ist DataGridViewImageCell.

ich hinzufügen, haben versucht, ...

&& dataGridViewDMSSettings.Rows[e.RowIndex].Cells["Example"].GetType() == DataGridViewImageCell 

... aber ich bin der IntelliSense-Nachricht bekommen „DataGridViewImageCell ist eine Art und ungültige im aktuellen Kontext.“

Hat jemand eine Lösung dafür?

+1

'.GetType() == typeof (DataGridViewImageCell)' – stuartd

+0

Angenommen, es funktioniert wie UITableViewCell, benötigt der Basiskonstruktor eine Cellid. Ich bin nicht sicher, wie man das inherrently bekommt, aber Sie sollten in der Lage sein, es in Ihrem Konstruktor zu setzen und Ihre eigene Funktion hinzuzufügen, um das cellid der Zelle zu erhalten. – curtainrising

+0

.GetType() == typeof (DataGridViewImageCell) gearbeitet, ich habe nicht erkannt, dass ich den Typ des Typs bekommen: P – kami

Antwort

2

Wie in den Kommentaren angegeben, müssen Sie den Operator typeof() verwenden, um einen Typ als Wert zu verwenden. Sie können einen Typnamen nicht als Wert verwenden.

dataGridViewDMSSettings.Rows[e.RowIndex].Cells["Example"].GetType() == 
    typeof(DataGridViewImageCell) 

Allerdings gibt es eine viel bessere Möglichkeit zu überprüfen, ob ein Wert eines bestimmten Typs ist, und das ist der is Betreiber:

dataGridViewDMSSettings.Rows[e.RowIndex].Cells["Example"].GetType() is 
    DataGridViewImageCell 

Ein wichtiger Unterschied besteht darin, dass is Beziehungen Vererbung Hinsicht , während == plus typeof() exakte Typäquivalenz erfordert.

+0

Auch 'dataGridViewDMSSettings.Rows [e.RowIndex] .Cells [" Beispiel "] ist DataGridViewImageCell' –

+1

@RezaAghaei Ja, sehr guter Punkt. Vielen Dank. – JLRishe