CLR: .Net / Mono / Boo / Otros CLR > C#
restar celda de datagridview
(1/1)
kancerman:
hola
tengo un datagridview con datos que ingreso desde el mismo form, una columna es "total" y tiene el indice 3 , esta columna la sumo con un boton y el resultado lo asigno a un textbox
--- Código: C# --- int sum = 0; for (int i = 0; i < dataGridView2.RowCount; i++) { sum = sum + int.Parse(dataGridView2.Rows[i].Cells[3].Value.ToString()); } textBox19.Text = sum.ToString(); el asunto es que con otro boton necesito restar el valor de la celda "total" de la fila seleccionada y lo hago asi
--- Código: C# --- textBox19.Text = Convert.ToInt32(textBox19.Text) - Convert.ToInt32(dataGridView2[3,dataGridView2.CurrentCellAddress.Y].Value);
el problema es que
--- Código: C# ---dataGridView2.CurrentCellAddress.Y siempre me da 1 menos , por ejemplo si el indice es 2 , me arroja un 1 por lo tanto me resta la fila siguiente lo extraño es que probe el mismo codigo en un boton para que me mostrara los indices y en ese boton me los muestra correctamente.
aqui el codigo del boton mencionado
--- Código: C# --- MessageBox.Show("equis = " + dataGridView2.CurrentCellAddress.X + "y = " + dataGridView2.CurrentCellAddress.Y); probe tambien con
--- Código: C# ---DataGridView2.CurrentRow.Index y ocurre lo mismo
gracias de antemano
Altrox:
Hola buenas, prueba con esto
--- Código: C# --- textBox19.Text = (Convert.ToInt32(textBox19.Text) - Convert.ToInt32(dataGridView2.SelectedRows[0].Cells[3].Value)).ToString();
Con "dataGridView2.SelectedRows[0].Cells[3].Value" obtienes el valor de la celda 3 de la fila seleccionada.
Si tienes configurada la tabla que se pueda seleccionar una celda, deberias obtener el índice de esa fila y luego obtener el valor de la celda.
--- Código: C# --- textBox19.Text = (Convert.ToInt32(textBox19.Text) - Convert.ToInt32(dataGridView2.Rows[dataGridView2.SelectedCells[0].RowIndex].Cells[3].Value)).ToString();
Luego si quieres obtener el valor de la celda desde los dos casos, prueba con esto
--- Código: C# --- if (dataGridView2.SelectedRows.Count == 0) { textBox19.Text = (Convert.ToInt32(textBox19.Text) - Convert.ToInt32(dataGridView2.Rows[dataGridView2.SelectedCells[0].RowIndex].Cells[3].Value)).ToString(); } else { textBox19.Text = (Convert.ToInt32(textBox19.Text) - Convert.ToInt32(dataGridView2.SelectedRows[0].Cells[3].Value)).ToString(); }
Bueno, ya contaras si funcionó. Saludos
kancerman:
hola
gracias por responder
con la primera opcion que me diste me tira error de indice fuera de rango "Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index"
y con el segundo me pasa lo mismo que al principio toma la primera y la segunda fila con el mismo indice 0
gracias
EDIT: alguna idea? tadabia no logro solucionar el problema
Navegación
Ir a la versión completa