Comment puis-je obtenir les données sélectionnées dans un DataGridView?

j'ai un DataTable relié à un DataGridView. J'ai activé L'Option Select dans la DGV. Est-il un moyen d'obtenir la ligne sélectionnée comme un DataRow afin que je puisse obtenir fortement typé l'accès à la ligne sélectionnée valeurs?

18
demandé sur Damien 2009-05-22 03:27:39

7 réponses

Je ne suis pas sûr de savoir comment le faire avec une source BindingSource, voici comment le faire avec une:

var drv = bindingSoure1.Current as DataRowView;
if (drv != null)
  var row = drv.Row as MyRowType;
7
répondu Henk Holterman 2009-05-22 00:37:32
DataRowView currentDataRowView = (DataRowView)dgv1.CurrentRow.DataBoundItem
DataRow row = currentDataRowView.Row
25
répondu stuartd 2011-07-19 09:34:38

Il est possible par l'obtention de la propriété suivante:

this.dataGridView.SelectedRows

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

alors on peut obtenir bounditem avec son propre type de la manière suivante:

DataGridViewSelectedRowCollection list = this.dataGridViewInventoryRecords.SelectedRows;
MyType selectedItem = (MyType)list[0].DataBoundItem; //[0] ---> first item
3
répondu Bronek 2012-07-03 15:57:40

vous devriez être en mesure de lancer directement votre ligne sélectionnée dans la ligne fortement tapée qui était liée à DataGridView.

1
répondu Dillie-O 2009-05-21 23:31:45

Vous essayez ceci.

DataRow row = gridView1.GetDataRow(gridView1.FocusedRowHandle);

if (row != null) { XtraMessageBox.Show(row["ID"].ToString()); } else return;

0
répondu AdamLy 2016-03-29 10:12:17

si vous avez relié votre datagridview à une table ou une vue dans une base de données, vous pouvez obtenir les données en tant qu'objet fortement tapé.

cette réponse est pour un formulaire Windows qui s'est connecté à une base de données en utilisant un ensemble de données au moment de la conception. Le nom d'exemple est DataSet1, et le nom d'exemple de 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 plus de 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-a-bound-datagridview-to-a-typed-datarow?forum=winformsdatacontrols

ce lien affiche les données programmées ajoutées à la source de données, ne pas extraire ces données d'une base de données existante. Cela m'a fait une partie du chemin vers la réponse: https://msdn.microsoft.com/en-us/library/4wszzzc7 (v=V110).aspx

0
répondu T. Fritz 2016-11-29 19:52:49

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

Pour avoir accès à des variables fortement typées quand un datagridview est lié à un datatable dans une bindingsource, procédez comme suit:

créer un nouveau projet.

insérez un ensemble de données nommé ds1 et un datable nommé dt99 avec des colonnes nommées DataColumn1 et DataColumn2, les deux chaînes type.

enter image description here

Ajouter un datagridView au formulaire principal et le lier au dt99

enter image description here

de sorte que la source dt99BindingSource connecte le datagridview et le datatable

enter image description here

ajouter et le gestionnaire d'événements pour le changement de sélection du datagridview, et insérer le morceau de code suivant

private void datagridview1_selection modified(object sender, EventArgs e) {

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

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

}

Maintenant vous avez fortement tapé des variables (D. DataColumn1 et D. DataColumn2) pour accéder aux cellules sélectionnées sur datagridview

une autre caractéristique intéressante est qu'un datatable inséré dans un ensemble de données fournit un ensemble de classes publiques qui aide beaucoup lors de la manipulation des datatables, 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
répondu Antonio Leite 2017-05-01 19:57:08