2016-04-26 7 views
2

Ich verwende SelectionChanged Ereignis eines DataGridView. Ich habe einen Code, der den Wert einer Zelle DataGridView zu einem TextBox anzeigt. Wenn ich jedoch auf die Spaltenüberschrift klicke, löst dies auch den Code aus (ich vermute wegen des Ereignisses SelectionChanged) und wird einen Fehler anzeigen.Wie überprüft man, ob Spaltenüberschrift in Datagridview mit SelectionChanged-Ereignis

Was ich erreichen möchte, ist meine Codes in der datagridview1_SelectionChanged in einer if Anweisung beizufügen. Wobei:

if(column header is clicked)  
    //don't do anything`  
else  
    //do the display of data to textbox` 

Ich möchte nur den Code für die Überprüfung wissen, ob Sie eine Überschrift angeklickt oder nicht.

+1

einfach testen if (selectedCells .Count> 0) – TaW

+0

Standardmäßig wird durch Klicken auf eine Spaltenüberschrift das SelectionChanged-Ereignis nicht ausgelöst. In der Standardeinstellung wird nur sortiert und die Auswahl wird nicht geändert. Es kann sich um benutzerdefinierten Code handeln, der alle Zellen in einer Spalte auswählt? was passiert, wenn Sie auf Ihre Spaltenüberschrift klicken. versuchen Sie zu diesem Zeitpunkt, Ihr Stacktrace zu debuggen. – Tewr

+0

@TaW, Ich habe den Code ausprobiert. Es funktionierte teilweise, weil ich immer noch den Fehler erhalte, aber dann mein Beispiel 'MessageBox' in' SelectedCells.Count> 0' anzeigt. Ich debuggte es und fand heraus, dass es immer noch zu meiner Exception in 'catch' geht, weil ich denke, wenn' SelectionChanged' auslöst, ist 'SelectedCells.Count' nicht 0 und geht zum' catch', dann geht es zurück zur Überprüfung von 'SelectedCells.Count' und es zählt jetzt als 0 und zeigt das Beispiel' MessageBox' an –

Antwort

2

Sie könnten Ihre DataGridViewCurrentRow für Null überprüfen. Wenn es nicht null ist, bedeutet es, dass Sie nicht die Spaltenüberschrift geklickt haben:

private void yourDataGridView_SelectionChanged(object sender, EventArgs e) 
{ 
    var current = yourDataGridView.CurrentRow; 
    if (current != null) // Means that you've not clicked the column header 
    { 
     //Display the value of a DataGridView's cell to a TextBox  
    } 
} 
+0

ausprobiert und es hat mein Problem endlich gelöst! :) Vielen Dank S.Akbari! Ich änderte den Code ein wenig: 'if (dgvSuppliers.CurrentRow == null)' '' { 'MessageBox.Show ("Spaltenüberschrift geklickt");' ' }' ' else' '{' '\\ Ihre Codes hier' '} ' –

0

nur im Fall überprüfen

List_SelectionChanged(object sender, EventArgs e) 
{ 
    if(e.Rowindex>-1) 
     ... 
} 

-1 für Header ist

Verwandte Themen