Crear DataTable con la suma de el contenido de las filas de otro DataTable.

10/06/2005 - 00:47 por Esparta Palma | Informe spam
Hola compañeros...


Deseo crear un DataTable en el que el resultado sea solo un registro con
la suma de cada uno de las columnas de otro DataTable, hasta ahora lo he
hecho con lo siguiente:


public DataTable CreateSuma(DataTable dtSuma)
{
//Creamos una copia del DataTable a procesar
DataTable dtResult = dtSuma.Clone();

DataRow drNewRow = dtResult.NewRow();

string cColumn = string.Empty;

//Recorremos todas las filas de el DataTable
foreach (DataRow drRows in dtSuma.Rows )
{
// Por cada una de las columnas del DataTable
for (int lnCounter=0; lnCounter < dtSuma.Columns.Count; lnCounter++)
{
cColumn = dtSuma.Columns[lnCounter].ColumnName;
// Realizar la suma, si no tiene valor nulo.
if (drRows[cColumn] != System.DBNull.Value )
drNewRow[cColumn] (drNewRow[cColumn] == System.DBNull.Value ? 0:
Convert.ToDouble(drNewRow[cColumn])+
Convert.ToDouble(drRows[cColumn]);

}
}

dtResult.Rows.Add(drNewRow);
return dtResult;
}

Funciona correctamente, pero me parece que no es la manera en que
debería hacerlo, ya que estoy haciendolo a "pie" y deberia existir algun
otro modo, o no?

He visto el método Compute() de los DataTable, pero no consigo hacer que
funcione como yo lo deseo, ya que el siguiente código me manda error:

for (lnCounter=0; lnCounter < dtSuma.Columns.Count; lnCounter++)
{
cColumn = dtSuma.Columns[lnCounter].ColumnName;
operation = "Sum("+cColumn.ToString()+")";
drNewRow[cColumn] dtSuma.Compute(operation,"1=1");
}

El error que me marca es el siguiente:

Uso no válido de la función de agregado Sum() y el tipo: String.

Realmente no se a que se deba ese error, si es que no puedo obtener la
suma de las columnas o es por el segundo parametro ("1=1"), ya que lo
que deseo es que sume todas las filas de el DataTable (sin condición).

Agradezco de antemano la ayuda que pudieran brindarme.
ž,ø€º°`°º€ø,žž,ø€º°`°º€ø,žž,ø€º°`°º€ø,žž,ø€º°`°º

Espartaco Palma Martínez
SysOp http://www.PortalFox.com
México D.F.
MoBlogs!
http://weblogs.golemproject.com/esparta/
http://www.espartha.com/blog/
 

Leer las respuestas

#1 Marcos Mellibovsky
12/06/2005 - 01:45 | Informe spam
poder hacerlo con la funcion Compute del datatable:
algo asi
for (int lnCounter=0; lnCounter < dtSuma.Columns.Count; lnCounter++)
{
cColumn = dtSuma.Columns[lnCounter].ColumnName;
drNewRow[cColumn] dtSuma.Compute(String.Format("SUM({0})",cColumn));
}


Saludos
Marcos Mellibovsky
MCAD - MCSD - MCSE - MCDBA
Cordoba - Argentina
"Esparta Palma" escribió en el
mensaje news:
Hola compañeros...


Deseo crear un DataTable en el que el resultado sea solo un registro con
la suma de cada uno de las columnas de otro DataTable, hasta ahora lo he
hecho con lo siguiente:


public DataTable CreateSuma(DataTable dtSuma)
{
//Creamos una copia del DataTable a procesar
DataTable dtResult = dtSuma.Clone();

DataRow drNewRow = dtResult.NewRow();

string cColumn = string.Empty;

//Recorremos todas las filas de el DataTable
foreach (DataRow drRows in dtSuma.Rows )
{
// Por cada una de las columnas del DataTable
for (int lnCounter=0; lnCounter < dtSuma.Columns.Count;


lnCounter++)
{
cColumn = dtSuma.Columns[lnCounter].ColumnName;
// Realizar la suma, si no tiene valor nulo.
if (drRows[cColumn] != System.DBNull.Value )
drNewRow[cColumn] > (drNewRow[cColumn] == System.DBNull.Value ? 0:
Convert.ToDouble(drNewRow[cColumn])+
Convert.ToDouble(drRows[cColumn]);

}
}

dtResult.Rows.Add(drNewRow);
return dtResult;
}

Funciona correctamente, pero me parece que no es la manera en que
debería hacerlo, ya que estoy haciendolo a "pie" y deberia existir algun
otro modo, o no?

He visto el método Compute() de los DataTable, pero no consigo hacer que
funcione como yo lo deseo, ya que el siguiente código me manda error:

for (lnCounter=0; lnCounter < dtSuma.Columns.Count; lnCounter++)
{
cColumn = dtSuma.Columns[lnCounter].ColumnName;
operation = "Sum("+cColumn.ToString()+")";
drNewRow[cColumn] dtSuma.Compute(operation,"1=1");
}

El error que me marca es el siguiente:

Uso no válido de la función de agregado Sum() y el tipo: String.

Realmente no se a que se deba ese error, si es que no puedo obtener la
suma de las columnas o es por el segundo parametro ("1=1"), ya que lo
que deseo es que sume todas las filas de el DataTable (sin condición).

Agradezco de antemano la ayuda que pudieran brindarme.
¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º

Espartaco Palma Martínez
SysOp http://www.PortalFox.com
México D.F.
MoBlogs!
http://weblogs.golemproject.com/esparta/
http://www.espartha.com/blog/

Preguntas similares