with winform example ejemplos databind data c# winforms datagridview

winform - fill datagridview c# with list



DataGridView obtiene el objeto seleccionado actual (5)

¿Qué hay de esta manera?

foreach (DataGridViewRow item in this.dataGridView1.SelectedRows) { MessageBox.Show(item.Cells[0].Value.ToString()); }

Podemos obtener múltiples datos de filas seleccionadas.

Necesito obtener el objeto seleccionado actualmente de da databound DataGridView.

No necesito el objeto de la celda seleccionada actual, sino el objeto en el que se basa toda la fila, en este caso un objeto de negocio cuyas propiedades forman las columnas de la cuadrícula.

Podría revisar el DataSource, pero eso solo es un objeto y puede ser un BindingSource o un IBindingList o algo así, por lo que no es una forma fácil de obtener el objeto deseado.

Detrás de eso está la necesidad de verificar el businessObject para una propiedad llamada IsChanged y pedirle al usuario que guarde o descarte los cambios, antes de que bindingsource seleccione el siguiente elemento. Por lo tanto, debo averiguar el objeto actual dentro de RowValidating-Event de DataGridView, ya que BindingSource no ofrece un evento para detener el cambio antes de que ocurra el cambio. Vea aquí el conocido problema

Gracias por leer ;-)


Aquí está mi código poner esto en su clase de persona

public static explicit operator Person(DataRow dr) { Person p = new Person(); p.adi = dr.ItemArray[0].ToString(); p.id = Int32.Parse(dr.ItemArray[1].ToString()); p.soyadi = dr.ItemArray[2].ToString(); p.kartNo = dr.ItemArray[3].ToString(); p.dogumTarihi = DateTime.Parse( dr.ItemArray[4].ToString() ); p.adres = dr.ItemArray[5].ToString(); p.meslek = dr.ItemArray[6].ToString(); p.telefon = dr.ItemArray[7].ToString(); p.gsm = dr.ItemArray[8].ToString(); p.eposta = dr.ItemArray[9].ToString(); return p; }

y este es un botón de actualización clic

DataRow row = (dataGridView1.SelectedRows[0].DataBoundItem as DataRowView).Row; Person selected = (Person)row;


Dado que usted indicó la IBindingList, sí, como otros han dicho que la propiedad DataBoundItem le dará lo que necesita, hay un problema que había experimentado anteriormente y terminó con una referencia nula pero ahora no puedo pensar en el escenario en lo que sucedió

Si está enlazado a datos utilizando un BindingSource, puede capturar los eventos CurrentChanged, CurrentItemChanged de su BindingSource, entonces no necesita tener una propiedad IsChanged adicional en su BO .., también el origen de datos subyacente también podría indicar modificaciones, por ejemplo, si tiene BindingSource. ligado a una tabla de datos la fila le daría una bandera modificada.


Puede obtener el valor de celda seleccionado como este

yourDGV.CurrentCell.Value;

si quieres el valor en forma de String simplemente usa toString como este

yourDGV.CurrentCell.Value.toString();

esto debería hacerlo


DataGridViewRow.DataBoundItem contiene el objeto ''comercial'' al que está vinculado.