c# - mvc - ¿Cómo obtener los valores de fila seleccionados de DevExpress XtraGrid?
gridview devexpress c# (7)
¿Cuál de sus rejillas estás usando? ¿XtraGrid o AspXGrid? Aquí hay una pieza tomada de una de mis aplicaciones usando XtraGrid.
private void grdContactsView_RowClick(object sender, DevExpress.XtraGrid.Views.Grid.RowClickEventArgs e)
{
_selectedContact = GetSelectedRow((DevExpress.XtraGrid.Views.Grid.GridView)sender);
}
private Contact GetSelectedRow(DevExpress.XtraGrid.Views.Grid.GridView view)
{
return (Contact)view.GetRow(view.FocusedRowHandle);
}
Mi cuadrícula tiene una lista de objetos de contacto vinculados a ella. Cada vez que se hace clic en una fila, se carga la fila seleccionada en _selectedContact. Espero que esto ayude. Encontrará mucha información sobre el uso de sus controles comprando visitando sus sitios de soporte y documentación.
Considere la siguiente imagen
Obtengo los valores de fila seleccionados en los tres cuadros de texto que se muestran en la figura cuando hago clic en una celda con el siguiente código.
void dataGridView1_CellClick_1(object sender, DataGridViewCellEventArgs e) {
TBGRNo.Text = dataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString();
TBSName.Text = dataGridView1.Rows[e.RowIndex].Cells[1].Value.ToString();
TBFName.Text = dataGridView1.Rows[e.RowIndex].Cells[2].Value.ToString();
}
Mi pregunta es: ¿cómo haré lo mismo en el control DevExpress XtraGrid?
Aquí está el camino que he seguido,
int[] selRows = ((GridView)gridControl1.MainView).GetSelectedRows();
DataRowView selRow = (DataRowView)(((GridView)gridControl1.MainView).GetRow(selRows[0]));
txtName.Text = selRow["name"].ToString();
También puede iterar a través de las filas seleccionadas utilizando la matriz selRows. Aquí el código describe cómo obtener datos solo de la primera fila seleccionada. Puede insertar estas líneas de código para hacer clic en el evento de la cuadrícula.
He encontrado la solución de la siguiente manera:
private void gridView1_RowCellClick(object sender, DevExpress.XtraGrid.Views.Grid.RowCellClickEventArgs e)
{
TBGRNo.Text = gridView1.GetRowCellValue(gridView1.FocusedRowHandle, "GRNo").ToString();
TBSName.Text = gridView1.GetRowCellValue(gridView1.FocusedRowHandle, "SName").ToString();
TBFName.Text = gridView1.GetRowCellValue(gridView1.FocusedRowHandle, "FName").ToString();
}
Para VB.Net
CType(GridControl1.MainView, GridView).GetFocusedRow()
Para c #
((GridView)gridControl1.MainView).GetFocusedRow();
Ejemplo de enlace de datos por linq para su uso
Dim selRow As CUSTOMER = CType(GridControl1.MainView, GridView).GetFocusedRow()
Puedes hacer esto de varias maneras. Puede utilizar el enlace de datos (típico inicializado después de InitializeComponent ();)
textBox1.DataBindings.Add(new Binding("Text", yourBindingSource,
"TableName.ColumnName", true, DataSourceUpdateMode.OnPropertyChanged));
o use un DataLayoutControl (si va a usar un cuadro de texto para editar, realmente recomiendo pasar un tiempo para aprender a usar este componente).
o en FocusedRowChanged mediante la asignación de uno de estos métodos:
textBox1.Text = gridView1.GetDataRow(e.FocusedRowHandle)["Name"].ToString();
textBox1.Text = gridView1.GetFocusedDataRow()["Name"].ToString();
textBox1.Text = (gridView1.GetFocusedRow() as DataRowView).Row["Name"].ToString();
textBox1.Text = gridView1.GetFocusedRowCellValue("Name").ToString();
Todo lo que tienes que hacer es usar el método GetFocusedRowCellValue del control gridView y colocarlo en el evento RowClick.
Por ejemplo:
private void gridView1_RowClick(object sender, DevExpress.XtraGrid.Views.Grid.RowClickEventArgs e)
{
if (this.gvCodigoNombres.GetFocusedRowCellValue("EMP_dni") == null)
return;
MessageBox.Show(""+this.gvCodigoNombres.GetFocusedRowCellValue("EMP_dni").ToString());
}
var rowHandle = gridView.FocusedRowHandle;
var obj = gridView.GetRowCellValue(rowHandle, "FieldName");
//For example
int val= Convert.ToInt32(gridView.GetRowCellValue(rowHandle, "FieldName"));