2010-10-07 11 views
8

C'est une tâche simple dans une autre grille, mais je n'arrive pas à le faire dans WPF DataGrid. Il existe des méthodes UnselectAll ou UnselectAllCells, mais ne fonctionnent pas. En outre, définir SelectedItem = null ou SelectedIndex = -1 ne fonctionne pas non plus.WPG DataGrid: Comment effacer la sélection par programme?

Il ya un post ici sur désactiver complètement la sélection, mais ce n'est pas ce que je veux. Je veux juste effacer la sélection actuelle (le cas échéant) et définir une nouvelle sélection par programme.

Répondre

3

Pour effacer la sélection actuelle, vous pouvez utiliser ce code (comme vous le voyez est différent si le mode est simple ou étendu)

if(this.dataGrid1.SelectionUnit != DataGridSelectionUnit.FullRow) 
    this.dataGrid1.SelectedCells.Clear(); 

if (this.dataGrid1.SelectionMode != DataGridSelectionMode.Single) //if the Extended mode 
    this.dataGrid1.SelectedItems.Clear(); 
else 
    this.dataGrid1.SelectedItem = null; 

Pour sélectionner de nouveaux éléments par programme, utilisez ce code:

if (this.dataGrid1.SelectionMode != DataGridSelectionMode.Single) 
{ //for example, select first and third items 
    var firstItem = this.dataGrid1.ItemsSource.OfType<object>().FirstOrDefault(); 
    var thirdItem = this.dataGrid1.ItemsSource.OfType<object>().Skip(2).FirstOrDefault(); 

    if(firstItem != null) 
     this.dataGrid1.SelectedItems.Add(firstItem); 
    if (thirdItem != null) 
     this.dataGrid1.SelectedItems.Add(thirdItem); 
} 
else 
    this.dataGrid1.SelectedItem = this.dataGrid1.ItemsSource.OfType<object>().FirstOrDefault(); //the first item 
+0

En fait, cela ne fonctionne pas non plus. – newman

+0

@miliu Oui, mon code précédent n'était pas correct. J'ai corrigé ma réponse. – vorrtex

+0

@vortex: Je ne sais pas si j'ai fait quelque chose de mal, mais ce nouveau code pour effacer la sélection ne fonctionne pas pour moi non plus. J'utilise ce code dans l'événement MouseDoubleClick. – newman

1

La désactivation et la réactivation du DataGrid ont fonctionné pour moi.

+0

Merci. A travaillé pour moi aussi. – Pking

1
DataGrid.UnselectAllCells() 

Cela fonctionne pour moi.

19
dataGrid.UnselectAll() 

Pour le mode rows