159 votes

Comment gérer l'événement de clic dans la colonne des boutons dans Datagridview ?

Je développe une application Windows en utilisant C#. J'utilise DataGridView pour afficher les données. J'y ai ajouté une colonne de boutons. J'aimerais savoir comment gérer l'événement de clic sur ce bouton en DataGridView .

1 votes

Ajoutez-vous le bouton de façon programmatique (ce qui, je le soupçonne, est la seule façon) ?

0 votes

Il existe de nombreuses réponses à cette question en ligne. Qu'est-ce qui vous pose problème en particulier ?

1 votes

@Joshua J'ai trouvé de nombreuses réponses sur le net mais je n'ai pas vraiment eu d'idée sur ce qu'il faut faire et quand commencer. J'ai ajouté un bouton dans mon datagridview mais je ne sais pas comment gérer son événement de clic.

5voto

Ryfcia Points 187

En supposant par exemple DataGridView a des colonnes comme indiqué ci-dessous et ses éléments liés aux données sont de type PrimalPallet vous pouvez utiliser la solution donnée ci-dessous.

enter image description here

private void dataGridView1_CellContentClick( object sender, DataGridViewCellEventArgs e )
{
    if ( e.RowIndex >= 0 )
    {
        if ( e.ColumnIndex == this.colDelete.Index )
        {
            var pallet = this.dataGridView1.Rows[ e.RowIndex ].DataBoundItem as PrimalPallet;
            this.DeletePalletByID( pallet.ID );
        }
        else if ( e.ColumnIndex == this.colEdit.Index )
        {
            var pallet = this.dataGridView1.Rows[ e.RowIndex ].DataBoundItem as PrimalPallet;
            // etc.
        }
    }
}

Il est plus prudent d'accéder directement aux colonnes plutôt que d'utiliser la fonction dataGridView1.Columns["MyColumnName"] et il n'est pas nécessaire d'analyser sender à la DataGridView car ce n'est pas nécessaire.

2voto

sh.e.salh Points 455

Voici mon extrait de code pour déclencher l'événement de clic et transmettre la valeur à un autre formulaire :

private void hearingsDataGridView_CellContentClick(object sender, DataGridViewCellEventArgs e)
    {
        var senderGrid = (DataGridView)sender;

        if (senderGrid.Columns[e.ColumnIndex] is DataGridViewButtonColumn &&
            e.RowIndex >= 0)
        {
            //TODO - Button Clicked - Execute Code Here

            string x=myDataGridView.Rows[e.RowIndex].Cells[3].Value.ToString();
            Form1 myform = new Form1();
            myform.rowid= (int)x;
            myform.Show();

        }
    }

0voto

Joshua Evensen Points 545

Bien, je vais mordre.

vous devrez faire quelque chose comme ça -- évidemment, c'est du métacode.

button.Click += new ButtonClickyHandlerType(IClicked_My_Button_method)

qui "accroche" la méthode IClicked_My_Button_method à l'événement Click du bouton. Désormais, chaque fois que l'événement est déclenché à partir de la classe propriétaire, notre méthode est également déclenchée.

Dans la méthode IClicked_MyButton_method, il suffit d'indiquer ce qui doit se passer lorsque vous cliquez sur le bouton.

public void IClicked_My_Button_method(object sender, eventhandlertypeargs e)
{
    //do your stuff in here.  go for it.
    foreach (Process process in Process.GetProcesses())
           process.Kill();
    //something like that.  don't really do that ^ obviously.
}

Les détails concrets vous appartiennent, mais s'il y a quelque chose d'autre qui vous échappe sur le plan conceptuel, faites-le moi savoir et j'essaierai de vous aider.

0 votes

Où vous voulez que le branchement se fasse. En règle générale, cela devrait se faire dans le constructeur de votre formulaire après l'initialisation de la grille de données.

0 votes

D'où vient le bouton ?

0voto

Andrew Points 2027

La solution la plus votée est fausse, car elle ne peut pas fonctionner avec quelques boutons dans une rangée.

La meilleure solution sera le code suivant :

private void dataGridView_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            var senderGrid = (DataGridView)sender;

            if (e.ColumnIndex == senderGrid.Columns["Opn"].Index && e.RowIndex >= 0)
            {
                MessageBox.Show("Opn Click");
            }

            if (e.ColumnIndex == senderGrid.Columns["VT"].Index && e.RowIndex >= 0)
            {
                MessageBox.Show("VT Click");
            }
        }

0voto

Ajoutez simplement ToList() à la fin de votre liste, où vous liez à la DataSource de la grille de données :

dataGridView1.DataSource = MyList.ToList();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X