2009-05-21 21 views

risposta

7

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; 
1

si dovrebbe essere in grado di lanciare direttamente il tuo riga selezionata nella fila fortemente tipizzato che era legato a DataGridView.

23
DataRowView currentDataRowView = (DataRowView)dgv1.CurrentRow.DataBoundItem 
DataRow row = currentDataRowView.Row 
+0

Hm ... Per me la riga selezionata ha «DataBoundItem» come null. –

+2

@ Hi-Angel non stai utilizzando l'associazione dati, quindi. – stuartd

3

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 
0

di provare questo.

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

0

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

0

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.

enter image description here

Aggiungi un DataGridView al form principale e associarlo al dt99

enter image description here

In modo che il dt99BindingSource collega la datagridview e DataTable

enter image description here

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); 

    } 
Problemi correlati