web-dev-qa-db-fra.com

DataGridView sans ligne sélectionnée au début

Dans mes WinForms, j'ai DataGridView. Je voulais sélectionner la ligne complète à la fois, j'ai donc défini SelectionMode comme FullRowSelect. Et maintenant j'ai un problème, car au début mon formulaire souligne la première ligne (l'ensemble des lignes sélectionnées est vide, la première ligne n'est pas sélectionnée mais juste soulignée). J'ai essayé beaucoup de choses, telles que:

    private void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
    {
        dataGridView1.ClearSelection();
    }

Et tout a échoué, car en fait il n'y a pas de sélection.

Comment puis-je me débarrasser de ce soulignement?

Merci pour toute aide!

17
Peter

Malheureusement, aucune de ces réponses ne m'a aidé, mais j'ai trouvé une autre solution. Au lieu d'une sélection impossible, je vais juste le cacher avec ce morceau de code:

dataGridView1.DefaultCellStyle.SelectionBackColor = dataGridView1.DefaultCellStyle.BackColor;
dataGridView1.DefaultCellStyle.SelectionForeColor = dataGridView1.DefaultCellStyle.ForeColor;

Donc, si quelqu'un veut simplement masquer la sélection, cela fonctionnera plutôt bien.

À votre santé :)

12
Peter

Cela fonctionne pour moi:

private void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
    dataGridView1.Rows[0].Selected = false;
}
15
Nicolas Tyler

Il suffit de mettre dataGridView1.ClearSelection(); dans l'événement de chargement du formulaire.

13
ramires.cabral

Vous devriez essayer de mettre dans l'événement montré datagridView.ClearCelection() et aussi datagridView.CurrentCell=null Et par exemple si vous voulez sélectionner une ligne pour supprimer ou changer des informations faites simplement if(datagridView.CurrentCell==null){ MessageBox.Show("You must select row");} ça marche pour moi

2
jhony3

Essayez ceci peut être utile

private void dgv_order_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
        {
            dgv_order.CurrentCell.Selected = false;
            dgv_order.ClearSelection();
        }
2
Nitin Patil

Vous pouvez appeler la méthode dataGridView.ClearSelection () dans l'événement form_Load comme ceci ...

    private void Form1_Load(object sender, EventArgs e)
    {
     // You will get selectedCells count 1 here
     DataGridViewSelectedCellCollection selectedCells = dataGridView.SelectedCells;
     // Call clearSelection 
     dataGridView.ClearSelection();
     // Now You will get selectedCells count 0 here
     selectedCells = dataGridViewSchedule.SelectedCells;
    }
1
user4860969

Essayez de définir DataGridView.AllowUserToAddRows = false Dans le constructeur après InitializeComponent().

1
Jacob Seleznev

Parfois, lorsque vous rechargez votre formulaire sans fermer votre programme, la première ligne est mise en surbrillance. Mais il ne sera pas sélectionné et vous obtiendrez -1 pour l'index de ligne sélectionné.

Vous pouvez le faire comme ceci:

1. Stockez les styles par défaut lors du chargement du formulaire:

 Public Class aRoots
    Dim df1, df2, df3, df4 As Color
    Private Sub aRoots_Load(sender As Object, e As EventArgs) Handles Me.Load
            df1 = DGV_Root.DefaultCellStyle.SelectionBackColor
            df2 = DGV_Root.DefaultCellStyle.BackColor
            df3 = DGV_Root.DefaultCellStyle.SelectionForeColor
            df4 = DGV_Root.DefaultCellStyle.ForeColor

2. Modifiez les styles de cellule lors de l'interaction avec datagridview:

Private Sub LoadRoot()
       For i = 0 To 5
                DGV_Root.Rows.Add()
                For j = 0 To 3
                    DGV_Root.Item(j, i).Value = ...
                Next
            Next
        'DGV_Root.ClearSelection() ==> instead of this use 2 lines below
        DGV_Root.DefaultCellStyle.SelectionBackColor = df2
        DGV_Root.DefaultCellStyle.SelectionForeColor = df4
    End Sub

3. Modifiez les styles de cellule par défaut lorsque la sélection est modifiée comme cell_click ou cell_double click:

Private Sub DGV_Root_CellMouseClick(sender As Object, e As DataGridViewCellMouseEventArgs) Handles DGV_Root.CellMouseClick
        DGV_Root.DefaultCellStyle.SelectionBackColor = df1
        DGV_Root.DefaultCellStyle.SelectionForeColor = df3


...
End Sub

4. restaurer tous les paramètres par défaut lorsque vous souhaitez fermer le formulaire:

Private Sub PbClose_Click(sender As Object, e As EventArgs) Handles PbClose.Click
        BtnCancel.PerformClick()
        DGV_Root.DefaultCellStyle.SelectionBackColor = df1
        DGV_Root.DefaultCellStyle.BackColor = df2
        DGV_Root.DefaultCellStyle.SelectionForeColor = df3
        DGV_Root.DefaultCellStyle.ForeColor = df4
        Me.Close()
End Sub

J'espère que cela vous aidera les gars.

0
Soly

L'événement à définir pour la ligne sélectionnée désactivée au démarrage est le suivant, et gère un FLAG pour arrêter ClearSelection

private void dataGridView_SelectionChanged(object sender, EventArgs e)
{

    if (FLAG==true)
    {
       dataGridView.ClearSelection();
       FLAG=false;
    }
}
0
daniele3004

Ce travail pour moi pour une sélection claire sur databind

Protected Sub GridCancel_DataBinding(sender As Object, e As EventArgs) Handles GridCancel.DataBinding
    GridCancel.SelectedIndex = -1

End Sub
0
Ajayadas

Si cela est dû au fait qu'il a déclenché l'événement GridView1_SelectionChanged indésirable lors du chargement initial, vous pouvez utiliser un indicateur pour gérer cela.

public partial class YourFormName
{ 
    private bool IsReady= false;

    private void YourFormName_Load(object sender, EventArgs e)
    { 
           //Load your GridView1...
           //Format your GridView1...
            IsReady = true;
    }
    void GridView1_SelectionChanged(object sender, EventArgs e)
    {
         if (!IsReady) 
             return;
         //do the rest of the stuffs
    }
}
0
HaiNguyen