web-dev-qa-db-fra.com

Obtenir des données de la ligne sélectionnée datagridview et quel événement?

J'ai un DataGridView (Selectionmode: FullRowSelect) sur un formulaire Windows avec quelques zones de texte, donc ce que je veux faire, c'est que chaque fois qu'un utilisateur sélectionne une ligne (clic ou double-clic peut-être), le contenu de cette ligne doit être affiché dans le texte des boites,

j'ai essayé ces codes

private void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
{
    MessageBox.Show("CEll Double_Click event calls");
    int rowIndex = e.RowIndex;
    DataGridViewRow row = dataGridView1.Rows[rowIndex];
    textBox5.Text = row.Cells[1].Value;
}

private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
    int rowIndex = e.RowIndex;
    DataGridViewRow row = dataGridView1.Rows[rowIndex];
    textBox5.Text = dataGridView1.Rows[1].Cells[1].Value.ToString();// row.Cells[1].Value;
}

il y a beaucoup d'autres zones de texte, mais le problème principal est qu'aucun événement ne semble être déclenché, quel événement dois-je utiliser pour le faire, ou existe-t-il une propriété de datagrid que j'aurais peut-être définie comme incorrecte? Toute aide serait appréciée...:(

38
Samy S.Rathore

Vous pouvez utiliser l'événement SelectionChanged puisque vous utilisez le mode de sélection FullRowSelect. À l’intérieur du gestionnaire, vous pouvez accéder à la propriété SelectedRows et en obtenir des données. Exemple:

private void dataGridView_SelectionChanged(object sender, EventArgs e) 
{
    foreach (DataGridViewRow row in dataGridView.SelectedRows) 
    {
        string value1 = row.Cells[0].Value.ToString();
        string value2 = row.Cells[1].Value.ToString();
        //...
    }
}

Vous pouvez également parcourir la collection de colonnes au lieu de taper des index ...

53
Vale

Vous pouvez essayer cet événement de clic

private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
    if (e.RowIndex >= 0)
    {
        DataGridViewRow row = this.dataGridView1.Rows[e.RowIndex];
        Eid_txt.Text = row.Cells["Employee ID"].Value.ToString();
        Name_txt.Text = row.Cells["First Name"].Value.ToString();
        Surname_txt.Text = row.Cells["Last Name"].Value.ToString();
13
helper

Prenez d'abord une étiquette. définir sa visibilité sur false, puis écrivez ceci sur l'événement DataGridView_CellClick

private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
    label.Text=dataGridView1.Rows[e.RowIndex].Cells["Your Coloumn name"].Value.ToString();
    // then perform your select statement according to that label.
}
//try it it might work for you
9
vikscool

Vous devriez vérifier votre fichier de concepteur. Ouvrez Form1.Designer.cs et
trouvez cette ligne: windows Form Designer Generated Code.
Développez-le et vous verrez beaucoup de code. Vérifiez donc si cette ligne est présente dans les contrôles datagridview1 sinon placez-la.

this.dataGridView1.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataGridView1_CellClick); 

J'espère que ça aide.

4
Giri

La solution simple serait comme ci-dessous. C'est l'amélioration de la solution de vale.

private void dgMapTable_SelectionChanged(object sender, EventArgs e) 
{
    int active_map=0;
    if(dgMapTable.SelectedRows.Count>0)
        active_map = dgMapTable.SelectedRows[0].Index;
    // User code if required Process_ROW(active_map);
}

Note pour les autres lecteurs, pour que le code ci-dessus fonctionne FullRowSelect le mode de sélection de datagridview doit être utilisé. Vous pouvez étendre cela pour donner un message si plus de deux lignes sont sélectionnées.

3
Harshal Doshi Jain