web-dev-qa-db-fra.com

Désélectionner toutes les lignes dans datagridview

J'ai deux vues de grille de données et lorsque je clique sur l'une d'elles, je souhaite désélectionner toute la sélection dans la deuxième fenêtre de grille de données, j'ai essayé ceci, mais rien ne fonctionne:

firstItemsDataGridView.ClearSelection();
firstItemsDataGridView.CurrentCell = null;

ne fonctionne pas,

firstItemsDataGridView.ClearSelection();
if (firstItemsDataGridView.Rows.Count > 0)
    firstItemsDataGridView[1, 0].Selected = true;
firstItemsDataGridView.CurrentCell = null;
firstItemsDataGridView.ClearSelection();
foreach (DataGridViewRow item in firstItemsDataGridView.Rows) {
    item.Selected = false;

    foreach (DataGridViewCell itemCell in firstItemsDataGridView.Columns) {
        itemCell.Selected = false;
    }
}

ne fonctionne pas,

firstItemsDataGridView.Rows[0,-1].Selected = true;

ne fonctionne pas trop.

J'ai réglé le mode de sélection sur la sélection de rangée complète et je ne sais pas comment atteindre mon objectif.
Merci beaucoup!

20
Martin Ch
dataGridView1.ClearSelection();

Devrait marcher. Vous avez peut-être un code qui sélectionne automatiquement les lignes qui sont déclenchées?

52
Mitzi

Puisqu'il n'y a pas de réponse, et que j'ai utilisé cette réponse dans d'autres publications et que j'ai rencontré le même problème de sélection de la première ligne et que la désélection n'a pas été possible:

Color blue  = ColorTranslator.FromHtml("#CCFFFF");
Color red = ColorTranslator.FromHtml("#FFCCFF");
Color letters = Color.Black;

foreach (DataGridViewRow r in datagridIncome.Rows)
{
    if (r.Cells[5].Value.ToString().Contains("1")) { 
        r.DefaultCellStyle.BackColor = blue;
        r.DefaultCellStyle.SelectionBackColor = blue;
        r.DefaultCellStyle.SelectionForeColor = letters;
    }
    else { 
        r.DefaultCellStyle.BackColor = red;
        r.DefaultCellStyle.SelectionBackColor = red;
        r.DefaultCellStyle.SelectionForeColor = letters;
    }
}

C'est une petite astuce, la seule façon de voir une ligne est sélectionnée, c'est par la toute première colonne (pas la colonne [0], mais celle-ci donc). Lorsque vous cliquez sur une autre ligne, vous ne verrez plus la sélection bleue, seule la flèche indique la ligne sélectionnée.

SOLUTION:

j'ai découvert pourquoi ma première ligne avait été sélectionnée par défaut et j'ai découvert comment ne pas la sélectionner par défaut.

Par défaut, mon datagridview était l'objet avec le premier taquet de tabulation sur mon formulaire Windows. Faire en sorte que la tabulation se termine en premier sur un autre objet (la désactivation de la tabulation pour la grille de données fonctionnera éventuellement) désactivée en sélectionnant la première ligne

4
Mario

Une réponse à NullSkull a résolu le problème pour moi: la cellule de la ligne 0, colonne 0 du contrôle datagridview était toujours sélectionnée au chargement du formulaire et ne pouvait pas être désélectionnée malgré l'appel de ClearSelection dans la méthode constructeur du formulaire. Je venais juste d'appeler ClearSelection dans l'événement Form_Load . http://www.nullskull.com/q/10066166/how-to-deselect-the-first-row-whenthe-form-i- Chargé-dans-datagridview-dans-windows-application.aspx

3
voidmain

Il suffit d'utiliser: 

dgvName.ClearSelection ();

1
Ahmed Elzeiny

Assurez-vous que toutes les lignes sont désélectionnées (dataGridView.Rows [...]. Selected = false)

La ligne zéro étant par défaut sélectionnée, définissez dataGridView.Rows [0] .Selected = false lors de l'ouverture de DataGridView et tant que les autres options sont définies de sorte que l'utilisateur ne puisse pas sélectionner, vous n'aurez et ne conserverez rien sélectionné.

0
Klinkenbecker

Si vous utilisez WPF et souhaitez conserver un modèle de conception MVVM, vous pouvez lier les deux éléments sélectionnés à la même propriété. Ainsi, lorsque vous les sélectionnez, les autres sont automatiquement désélectionnés.

essayez quelque chose comme ça

public class SingletonClass
{
    private static SingletonClass _Instance;
    public static SingletonClass Instance
    {
        get
        {
            if (_Instance == null)
                _Instance = new SingletonClass();
            return _Instance;
        }
    }   // End Property Instance

    private object _SelectedItem;
    public object SelectedItem
    {
        get { return _SelectedItem; }
        set { _SelectedItem = value; }
    } // End Selected Item
 }

<DataGrid Name="Datagrid1" SelectedItem="{Binding Source={x:Static Const:SingletonClass.Instance},Path=SelectedItem,IsAsync=True}">

<DataGrid Name="Datagrid2" SelectedItem="{Binding Source={x:Static Const:SingletonClass.Instance},Path=SelectedItem,IsAsync=True}">

* J'ai uniquement utilisé une classe singleton car cela fonctionnera sur différentes vues dans différentes instances. Vous pouvez utiliser une classe standard si vous êtes dans la même vue.

Veuillez noter le IsAsync = True sur le xmal, si vous prévoyez d’utiliser une classe singleton à travers différentes vues, cela ne fonctionnera pas.

0
Bruno Khoury

J'ai essayé ça et ça marche pour moi:

for (int i = 0; i < dataGridView1.Rows.Count;i++)
{
  dataGridView1.Rows[i].Selected = false;
}
0
// no selection in dgv at the begening   
dgv.FirstDisplayedCell = null;
dgv.ClearSelection();
// try this it is working !
0
AbuDawood