Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: Piton en 19 Noviembre 2022, 23:55 pm



Título: necesito agregar la suma total de todos los elemtentos de una matriz pero no me deja usar row.cells. adjunto codigo abaj
Publicado por: Piton en 19 Noviembre 2022, 23:55 pm
double total = 0;

            foreach (DataGridView row in dgvImportes.Rows)
            {
                total += Convert.ToDouble(row.Cells[]);           
            }





el error es:
Compiler Error CS1061
Article
10/27/2021
2 minutes to read
12 contributors
'type' does not contain a definition for 'name' and no accessible extension method 'name' accepting a first argument of type 'type' could be found (are you missing a using directive or an assembly reference?).

This error occurs when you try to call a method or access a class member that does not exist.

espero su respuesta y muchas gracias!!!


Título: Re: necesito agregar la suma total de todos los elemtentos de una matriz pero no me deja usar row.cells. adjunto codigo
Publicado por: Elektro Enjuto en 22 Noviembre 2022, 18:33 pm
Muy buenas. Paso a enumerar los problemas que tienes en el código, y al final la solución:

1. Para poder usar la función "System.Convert.To*", el tipo debe implementar la interfaz IConvertible.

2. La función "System.Convert.To*" no está diseñada para interpretar un array de tipos IConvertible, ni mucho menos una colección de celdas de un datagridview o DataGridViewCellCollection. Para eso puedes utilizar la función "System.Array.ConvertAll".

Para lo que deseas hacer, puedes utilizar esta simple función que permite sumar los valores de todas las celdas de una fila:

Código
  1. public static decimal SumCellValues(DataGridViewRow row) {
  2.  
  3. System.Decimal tempVar = 0M;
  4.  
  5. IEnumerable<decimal> values = (
  6. from DataGridViewCell cell in row.Cells
  7. where decimal.TryParse(cell.Value, out tempVar)
  8. select decimal.Parse(cell.Value));
  9.  
  10. return Enumerable.Sum(values);
  11. }

Nota: los valores no numéricos son ignorados.

O esta función de sobrecarga que permite elegir el tipo numérico de retorno:

Código
  1. public static T SumCellValues<T>(DataGridViewRow row) where T: IConvertible {
  2. return (T)SumCellValues(row);
  3. }

Saludos!