2009-05-21 36 views

Respuesta

7

no estoy seguro de cómo hacerlo w/OA BindingSource, aquí es cómo hacerlo con una sola:

var drv = bindingSoure1.Current as DataRowView; 
if (drv != null) 
    var row = drv.Row as MyRowType; 
1

usted debería ser capaz de lanzar directamente a su fila seleccionada en la fila fuertemente tipado que estaba vinculado a DataGridView.

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

Hm ... Para mí, la fila seleccionada tiene «DataBoundItem» como nulo. –

+2

@ Hi-Angel no está utilizando el enlace de datos, entonces. – stuartd

3

Es posible por conseguir siguiente propiedad:

this.dataGridView.SelectedRows 

Se obtiene una colección de tipo: DataGridViewSelectedRowCollection. Contiene elementos del tipo: DataGridViewRow.

A continuación, se puede obtener con los bounditem propio tipo en la siguiente forma:

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

de probar esto.

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

0

Si ha vinculado su DataGridView a una tabla o vista en una base de datos, puede obtener los datos como un objeto inflexible de tipos.

Esta respuesta es para un formulario de Windows que se conectó a una base de datos utilizando un DataSet en tiempo de diseño. El nombre de ejemplo es DataSet1, y el nombre de la tabla de ejemplo es 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; 

Este enlace es la respuesta. Espero haber agregado claridad y un ejemplo más arriba. 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

Este enlace muestra datos agregados mediante programación a la fuente de datos, sin extraer esos datos de una base de datos existente. Esto me llevó a una parte de la respuesta: https://msdn.microsoft.com/en-us/library/4wszzzc7(v=vs.110).aspx

0

No es posible tener un acceso fuertemente tipado a una vista de cuadrícula de datos si no se está utilizando un adaptador de tabla dentro del conjunto de datos.

Para tener acceso a las variables establecimiento inflexible cuando un DataGridView está unido a una tabla de datos a través de un BindingSource, hacen de la siguiente manera:

crear un nuevo proyecto.

Inserte un conjunto de datos denominado ds1 y una tabla de datos denominada dt99 con columnas llamadas DataColumn1 y DataColumn2, ambos tipos de cadena.

enter image description here

Añadir un DataGridView al formulario principal y enlazarlo a la dt99

enter image description here

Para que el dt99BindingSource conecta el DataGridView y la tabla de datos

enter image description here

Añadir y controlador de eventos para el cambio de selección de DataGridView, e inserte el siguiente fragmento de código

privada vacío dataGridView1_SelectionChanged (object sender, EventArgs e) {

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

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

}

Ahora se han inflexible de tipos de variables (d.DataColumn1 yd .DataColumn2) para acceder a las celdas seleccionadas en el datagridview

Otra característica interesante es que una tabla de datos insertada dentro de un conjunto de datos proporciona un conjunto de clases públicas que ayuda mucho al manejar tablas de datos, por ejemplo

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

    } 
Cuestiones relacionadas