c# - example - Datagridview selección de fila completa, pero obtener valor de celda única
datagridview c# windows form (13)
Tengo una vista de cuadrícula de datos que es una selección de fila completa. ¿Cómo puedo obtener los datos de solo una celda determinada sin importar en qué celda de la fila se hizo clic, ya que resalta toda la fila.
DataGridView.CurrentRow.Cells[n]
Ver: http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.currentrow.aspx
En el evento CellClick puedes escribir el siguiente código
string value =
datagridviewID.Rows[e.RowIndex].Cells[e.ColumnIndex].FormattedValue.ToString();
Usando el código del bove obtendrás el valor de la celda que pinchaste. Si desea obtener el valor de la columna paricular en la fila cliqueada, simplemente reemplace e.ColumnIndex con el índice de columna que desea
también puede obtener los valores de la celda ya que la selección actual está referenciada bajo CurrentRow
dataGridView1.CurrentRow.Cell[indexorname].FormattedValue
Aquí puede usar el índice o el nombre de la columna y obtener el valor.
Solo use: dataGridView1.CurrentCell.Value.ToString()
private void dataGridView1_MouseDoubleClick(object sender, MouseEventArgs e)
{
MessageBox.Show(dataGridView1.CurrentCell.Value.ToString());
}
o
// dataGrid1.Rows[yourRowIndex ].Cells[yourColumnIndex].Value.ToString()
//Example1:yourRowIndex=dataGridView1.CurrentRow.Index (from selectedRow );
dataGrid1.Rows[dataGridView1.CurrentRow.Index].Cells[2].Value.ToString()
//Example2:yourRowIndex=3,yourColumnIndex=2 (select by programmatically )
dataGrid1.Rows[3].Cells[2].Value.ToString()
Para obtener un valor de celda basado en la selección de fila completa:
if (dataGridView1.SelectedRows.Count > 0)
{
foreach (DataGridViewRow row in dataGridView1.Rows)
{
TextBox1.Text = row.Cells["ColumnName"].Value.ToString();
}
}
else
{
MessageBox.Show("Please select item!");
}
}
Puedes hacer así ...
private void datagridview1_SelectionChanged(object sender, EventArgs e)
{
if (datagridview1.SelectedCells.Count > 0)
{
int selectedrowindex = datagridview1.SelectedCells[0].RowIndex;
DataGridViewRow selectedRow = datagridview1.Rows[selectedrowindex];
string a = Convert.ToString(selectedRow.Cells["you have to mention you cell corresponding column name"].Value);
}
}
Solo quiero señalar, puedes usar .selectedindex para que sea un poco más limpio
string value = gridview.Rows[gridview.SelectedIndex].Cells[1].Text.ToString();
Use Cell Click
ya que otros métodos mencionados se activarán al vincular los datos, no son útiles si quiere el valor seleccionado, luego el formulario se cierra.
private void dgvProducts_CellClick(object sender, DataGridViewCellEventArgs e)
{
if (dgvProducts.SelectedCells.Count > 0) // Checking to see if any cell is selected
{
int mSelectedRowIndex = dgvProducts.SelectedCells[0].RowIndex;
DataGridViewRow mSelectedRow = dgvProducts.Rows[mSelectedRowIndex];
string mCatagoryName = Convert.ToString(mSelectedRow.Cells[1].Value);
SomeOtherMethod(mProductName); // Passing the name to where ever you need it
this.close();
}
}
Para aquellos que no pudieron activar el evento click, pueden usar el siguiente código
public Form1()
{
InitializeComponent();
this.dataGridView1.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataGridView1_CellClick);
}
string value = dataGridVeiw1.CurrentRow.Cells[1].Value.ToString();
El código más simple es DataGridView1.SelectedCells(column_index).Value
Como ejemplo, para la primera celda seleccionada:
DataGridView1.SelectedCells(0).Value
esto me da el valor de texto de la celda exacta en la vista de cuadrícula de datos
private void dataGridView_SelectionChanged(object sender, EventArgs e)
{
label1.Text = dataGridView.CurrentRow.Cells[#].Value.ToString();
}
Puedes verlo en la etiqueta y cambiar # por el índice de la celda exacta que quieras
Si desea obtener el contenido de la celda seleccionada; necesitas el índice de fila y celda.
int rowindex = dataGridView1.CurrentCell.RowIndex;
int columnindex = dataGridView1.CurrentCell.ColumnIndex;
dataGridView1.Rows[rowindex].Cells[columnindex].Value.ToString();