c# - example - ¿Cómo obtener el valor de celda de DataGridView por nombre de columna?
fill datagridview c# (6)
Al hacer esto, podrá acceder a la celda en el nombre de la columna "xxx" para la fila seleccionada actualmente.
dataGridView1.SelectedRows[0].Cells["xxx"]
Tengo una aplicación WinForms con un DataGridView
, cuyo DataSource es un DataTable (rellenado de SQL Server) que tiene una columna de xxx
. El siguiente código plantea la excepción de
ArgumentException no fue manejado No se puede encontrar la columna denominada xxx.
foreach (DataGridViewRow row in Rows)
{
if (object.Equals(row.Cells["xxx"].Value, 123))
}
¿Es posible obtener los valores de celda por nombre de columna?
Encontré esto:
- Haga clic derecho en la vista de datos.
- Seleccione del menú emergente "Editar columnas".
- Seleccione la columna que desee. Diseño / (Nombre) - es lo que estabas buscando.
Muestra:
if(dataGridViewProjectList.Rows[dataGridViewProjectList.CurrentCell.RowIndex].Cells["dateendDataGridViewTextBoxColumn"].Value.ToString().Length == 0)
Sí, simplemente elimine las comillas y agregue .Index, es decir,
foreach (DataGridViewRow row in Rows)
{
if (object.Equals(row.Cells[xxx.Index].Value, 123))
... eso es si su columna realmente se llama xxx y no otro nombre como Column1, etc. Puede establecer el nombre de la columna y el encabezado de la columna de forma independiente, así que verifique en el diseñador.
Si la columna de la cuadrícula en el modo de diseño. entonces el nombre de la columna era gridView ~~~ Ejemplo de nombre de los controles de la columna:
DataGridViewTextBoxColumn idDataGridViewTextBoxColumn = new DataGridViewTextBoxColumn();
idDataGridViewTextBoxColumn.Name = "idDataGridViewTextBoxColumn";
A continuación, puede acceder a este derecho, que desee.
row.Cells["idDataGridViewTextBoxColumn"].Value
Si te fijas en:
row.Cells["xxx"].Value;
Por esto :
row.Cells[yourdataGridView.Columns["xxx"].Index].Value;
DataGridViewColumn
objetos DataGridViewColumn
tienen un Name
(que se muestra solo en el diseñador de formularios) y una HeaderText
(que se muestra en la GUI en la parte superior de la columna). El indexador en su ejemplo utiliza la propiedad Name
la columna, por lo que, como dice que no funciona, supongo que realmente está tratando de usar el encabezado de la columna.
No hay nada incorporado que haga lo que usted desea, pero es fácil de agregar. Usaría un método de extensión para que sea fácil de usar:
public static class DataGridHelper
{
public static object GetCellValueFromColumnHeader(this DataGridViewCellCollection CellCollection, string HeaderText)
{
return CellCollection.Cast<DataGridViewCell>().First(c => c.OwningColumn.HeaderText == HeaderText).Value;
}
}
Y luego en su código:
foreach (DataGridViewRow row in Rows)
{
if (object.Equals(row.Cells.GetCellValueFromColumnHeader("xxx"), 123))
{
// ...
}
}