web-dev-qa-db-fra.com

Comment obtenir le DataRow sélectionné dans un DataGridView?

J'ai un DataTable lié à un DataGridView. J'ai FullRowSelect activé dans le DGV. Existe-t-il un moyen d'obtenir la ligne sélectionnée en tant que DataRow afin d'obtenir un accès fortement typé aux valeurs de la ligne sélectionnée?

18
Damien

Je ne sais pas comment le faire sans BindingSource, voici comment le faire avec un:

var drv = bindingSoure1.Current as DataRowView;
if (drv != null)
  var row = drv.Row as MyRowType;
7
Henk Holterman
DataRowView currentDataRowView = (DataRowView)dgv1.CurrentRow.DataBoundItem
DataRow row = currentDataRowView.Row
26
stuartd

C'est possible en obtenant la propriété suivante:

this.dataGridView.SelectedRows

On obtient une collection de type: DataGridViewSelectedRowCollection . Il contient des éléments de type: DataGridViewRow .

Ensuite, on peut obtenir des liens avec son propre type de la manière suivante:

DataGridViewSelectedRowCollection list = this.dataGridViewInventoryRecords.SelectedRows;
MyType selectedItem = (MyType)list[0].DataBoundItem; //[0] ---> first item
3
Bronek

Vous devriez pouvoir convertir directement la ligne sélectionnée dans la ligne fortement typée liée au DataGridView.

1
Dillie-O

Il n'est pas possible d'avoir un accès fortement typé à un datagridview si un tableadapter n'est pas utilisé dans l'ensemble de données.

Pour avoir accès aux variables fortement typées lorsqu'une datagridview est liée à un datatable via un bindingsource, procédez comme suit:

Créer un nouveau projet.

Insérez un DataSet nommé ds1 et un DataTable nommé dt99 avec des colonnes nommées DataColumn1 et DataColumn2, tous deux de type chaîne.

 enter image description here

Ajouter un datagridView au formulaire principal et le lier au dt99

 enter image description here

Alors que le dt99BindingSource connecte le datagridview et le datatable

 enter image description here

Ajouter et gestionnaire d'événements pour le changement de sélection de la datagridview, et insérez le morceau de code suivant

void privé dataGridView1_SelectionChanged (Expéditeur d'objet, EventArgs e) {

  ds1.dt99Row d= ((ds1.dt99Row)((DataRowView)dt99BindingSource.Current).Row);

  Debug.WriteLine(d.DataColumn1 + " " + d.DataColumn2);

}

Vous avez maintenant des variables fortement typées (d.DataColumn1 et d.DataColumn2) pour accéder aux cellules sélectionnées dans la vue datagrid

Une autre caractéristique intéressante est qu'un élément de données inséré dans un jeu de données fournit un ensemble de classes publiques qui aide beaucoup lors du traitement de données, par exemple

        private void Form1_Load(Object sender, EventArgs e)
    {
        ds1.dt99.Adddt99Row("K", "B");
        ds1.dt99.Adddt99Row("L", "D");
        ds1.dt99.Adddt99Row("M", "F");
        ds1.dt99.Adddt99Row("N", "H");

        ds1.dt99Row dr = ds1.dt99.Newdt99Row();
        dr.DataColumn1 = "X";
        dr.DataColumn2 = "Y";
        ds1.dt99.Adddt99Row(dr);

    }
0
Antonio Leite

Si vous avez lié votre datagridview à une table ou à une vue d'une base de données, vous pouvez extraire les données en tant qu'objet fortement typé.

Cette réponse concerne un formulaire Windows connecté à une base de données à l'aide d'un DataSet au moment de la conception. Le nom de l'exemple est DataSet1 et le nom de la table est Customer_Info.

// cast the data bound item to DataRowView so you have
// access to "Row", which
// has the actual data for the row in typed fields. 
DataRowView drv = dgv.SelectedRows(0).DataBoundItem as DataRowView;
// run the code and look at the debugger value of drv.Row -- 
// the type will be shown
// which is the type created by the data binding, representing 
// your table or view
//{YourDataSetName.YourTableOrViewType} tmpTableData = drv.Row as {YourDataSetName.YourTableOrViewType};
DataSet1.Customer_InfoRow tmpTableData = drv.Row as DataSet1.Customer_InfoRow;

Ce lien est la réponse. J'espère avoir ajouté de la clarté et un exemple ci-dessus. https://social.msdn.Microsoft.com/Forums/windows/en-US/f252e395-58e6-4703-ba7b-0740efcbecf3/can-i-convert-the-selected-row-in-all-a-bound- datagridview-to-a-typed-datarow? forum = winformsdatacontrols

Ce lien affiche les données ajoutées par programme à la source de données, sans extraire ces données d'une base de données existante. Cela m’a aidé à résoudre le problème: https://msdn.Microsoft.com/en-us/library/4wszzzc7(v=vs.110).aspx

0
T. Fritz

Vous essayez ceci.

DataRow row = gridView1.GetDataRow(gridView1.FocusedRowHandle);
if (row != null){XtraMessageBox.Show(row["ID"].ToString());}elsereturn;

0
AdamLy