Operacion en DataGrid C# y SQL

Tengo un DataGrid con los campos: CÓDIGO, PRODUCTO, CANTIDAD, PRECIO
Tengo los campos de código y cantidad de modo que pueda escribir y quiero que cuando yo teclee un código y presione enter me aparezcan los datos (que tengo en una bd) del producto (PRODUCTO y PRECIO y en CANTIDAD 1 por default ya que no tengo ese campo en la bd) y que cuando yo cambie en CANTIDAD por ejemplo 2, 5 etc en PRECIO me aparezca el total de la cantidad por el precio. Como un punto de venta.

1 respuesta

Respuesta
1
Lo que estas buscando puedes hacerlo en el evento CellEndEdit, el evento nos regresa como es habitual 2 parámetros el objeto que disparo el evento y DataGridViewCellEventArgs el cual nos regresa el indice del renglón y la celda que se edito por medio de e.RowIndex y e.CellIndex.
Tu DataGrid ya debe tener las 4 columnas (por lo general los tipos de datos los dejo en texto y después los convierto según sea necesario), no debes enlazarla a base de datos ya que la llenaremos manualmente.
Llenas la tabla:
MiDataGrid.Rows.Add(codigo,producto,cantidad,precio);
Con valores genéricos (Vacíos)(Para tener un renglón (Row) con el cual el usuario pueda trabajar).
Para tu consulta necesitas el filtro de el código el cual lo puedes obtener con el renglón y el indice así:
String Filtro = MiDataGrid.Rows[e.RowIndex].Cells[e.CellIndex].value.ToString();
a Continuacion haz tu consulta "Select * from miTabla  where Codigo = '" + Filtro + "'";
Una vez hecho la consulta llena tus campos faltantes puedes modificar las celdas por su indice o por el nombre de su columna :
(Cambiamos el valor de la celda "Producto" por el nombre de el producto resultado de la consulta en la base de datos.)   miDataGrid.Rows[e.RowIndex].cells["Producto"].Value=MiDataRow["Producto"].ToString();
y asi con Precio, Cantidad puedes poner un valor inicial de "1";
Ahora el evento CellEndEdit es disparado con todas las celdas así que todo el código anterior debe ser condicionado a que sea la celda de el "codigo" la que modificamos ya que de lo contrario cuando editemos la cantidad volvería a hacer la consulta:
Suponiendo que la columna donde esta "codigo" es la primera (0);
if (e.cellIndex == 0)
{
Hacer consulta y llenar campos (codigo anterior)
}else
{
//Si la columna con la cantidad es la 2
if (e.cellindex== 2)
{
<span style="white-space: pre;"> </span>Obtener el valor de precio unitario (guardado en una variable en la consulta o volviendo a consultar el valor);
<span style="white-space: pre;"> </span>Obtener el valor de cantidad
  Double Cantidad = Convert.toDouble(MiDataGrid.Rows[e.RowIndex].Cells["Cantidad"].Value);
Multiplicar los valores
Modificar la columna de precio por el nuevo Precio.
}
}
Recuerda manejar los errores, por ejemplo puede ser que el usuario se le ocurra mover la columna de cantidad sin antes haber consultado el código lo cual provocaría un error.
O si en lugar de escribir un numero en la columna de cantidad, escribe una letra.
Disculpa la tardanza en contestar, aunque lo probé desde tu contestación y me funcionó muy bien =) Muchas gracias por tu respuesta de gran utilidad.
***** o Excelente. Una fantástica solución.
Salu2 =)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas