Ho un DataTable associato a un DataGridView. Ho FullRowSelect abilitato nel DGV. C'è un modo per ottenere la riga selezionata come DataRow in modo che possa ottenere accesso fortemente digitato ai valori della riga selezionata?Come ottengo il DataRow selezionato in un DataGridView?
risposta
non sono sicuro di come farlo w/OA BindingSource, ecco come farlo con una sola:
var drv = bindingSoure1.Current as DataRowView;
if (drv != null)
var row = drv.Row as MyRowType;
si dovrebbe essere in grado di lanciare direttamente il tuo riga selezionata nella fila fortemente tipizzato che era legato a DataGridView.
DataRowView currentDataRowView = (DataRowView)dgv1.CurrentRow.DataBoundItem
DataRow row = currentDataRowView.Row
E 'possibile da ottenere seguente:
this.dataGridView.SelectedRows
Si ottiene una collezione di tipo: DataGridViewSelectedRowCollection. Contiene elementi di tipo: DataGridViewRow.
Poi si può ottenere boundItem con quelli proprio tipo in modo seguente:
DataGridViewSelectedRowCollection list = this.dataGridViewInventoryRecords.SelectedRows;
MyType selectedItem = (MyType)list[0].DataBoundItem; //[0] ---> first item
di provare questo.
DataRow row = gridView1.GetDataRow(gridView1.FocusedRowHandle);
if (row != null)
{
XtraMessageBox.Show(row["ID"].ToString());
}
else
return;
Se avete legato la vostra datagridview ad una tabella o vista in un database, è possibile ottenere i dati fuori come un oggetto fortemente tipizzato.
Questa risposta è per un modulo Windows connesso a un database utilizzando un DataSet in fase di progettazione. Il nome di esempio è DataSet1 e il nome della tabella di esempio è 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;
Questo collegamento è la risposta. Spero di aver aggiunto chiarezza e un esempio sopra. 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
Questo collegamento mostra i dati aggiunti a livello di codice all'origine dati, non estraendo i dati da un database esistente. Questo mi ha fatto parte della risposta alla risposta: https://msdn.microsoft.com/en-us/library/4wszzzc7(v=vs.110).aspx
Non è possibile avere un accesso fortemente digitato ad una vista datagrid se un tableadapter non viene utilizzato all'interno dell'insieme di dati.
di avere accesso digitato fortemente variabili quando un DataGridView è associato a un DataTable tramite un BindingSource, fare come segue:
creare un nuovo progetto.
Inserire un DataSet denominato ds1 e un DataTable denominato dt99 con colonne denominate DataColumn1 e DataColumn2, entrambi di tipo stringa.
Aggiungi un DataGridView al form principale e associarlo al dt99
In modo che il dt99BindingSource collega la datagridview e DataTable
Aggiungi e gestore di eventi per il cambio di selezione di il datagridview, e inserire il seguente pezzo di codice
private void dataGridView1_SelectionChanged (Object sender, EventArgs e) {
ds1.dt99Row d= ((ds1.dt99Row)((DataRowView)dt99BindingSource.Current).Row);
Debug.WriteLine(d.DataColumn1 + " " + d.DataColumn2);
}
Ora si hanno fortemente tipizzato le variabili (d.DataColumn1 e D .DataColumn2) per accedere alle celle selezionate nella vista datagrid
Un'altra caratteristica interessante è che un datatable inserito in un set di dati fornisce un insieme di classi pubbliche che aiuta molto quando si gestiscono i datatables, ad esempio
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);
}
Hm ... Per me la riga selezionata ha «DataBoundItem» come null. –
@ Hi-Angel non stai utilizzando l'associazione dati, quindi. – stuartd