net fila ejemplo create columns agregar c# datatable

fila - datatable columns add c#



Datatable-Suma cada celda en una fila (6)

Código de ejemplo para la respuesta de Yuriy:

using System; using System.Collections.Generic; using System.Linq; using System.Data; namespace DynamicColumns { class MainClass { public static void Main (string[] args) { Console.WriteLine ("Total all quantity columns"); var dt = new DataTable (); dt.Columns.Add ("ProductName", typeof(string)); dt.Columns.Add ("Qty1", typeof(int)); dt.Columns.Add ("Qty2", typeof(int)); dt.Columns.Add ("Qty3", typeof(int)); { var dr = dt.NewRow (); dr ["ProductName"] = "Keyboard"; dr ["Qty1"] = 2; dr ["Qty2"] = 5; dr ["Qty3"] = 6; dt.Rows.Add (dr); } { var dr = dt.NewRow (); dr ["ProductName"] = "Mouse"; dr ["Qty1"] = 5; dr ["Qty2"] = 1; dr ["Qty3"] = 2; dt.Rows.Add (dr); } string expression = string.Join (" + ", dt.Columns.OfType<DataColumn>() .Where(x => x.DataType == typeof(int)) .Select(x => x.ColumnName) .ToArray() ); dt.Columns.Add("Total", typeof(int)).Expression = expression; Console.WriteLine ("Expression: {0}",expression); Console.WriteLine ("/nProduct and totals"); foreach (var r in dt.Rows.OfType<DataRow>()) { Console.WriteLine ("{0} {1}", r["ProductName"], r["Total"]); } } } }

Salida:

Expression: Qty1 + Qty2 + Qty3 Product and totals Keyboard 13 Mouse 8

Me arriesgaría a adivinar que esta (expresión) es la solución más eficiente en comparación con el método lambda para llegar a cada fila de cada columna, e incluso se compara con el bucle de cada fila y columna.

Hay muchos ejemplos de cómo obtener la suma de cada celda en una columna. No he podido encontrar un ejemplo de cómo sumar cada celda en una fila y agregar ese total en la nueva columna llamada "Total", por ejemplo.

C # DataTable tiene DataTable1.Compute("SUM(["Column Name"])", "")

Ejemplo de lo que me gustaría hacer a continuación. Sin embargo, también me gustaría poder excluir columnas específicas, ya que pueden no contener números.

Editar La tabla es dinámica y el número de columnas puede cambiar.


DataTable tiene capacidad para crear columnas calculadas. En su caso, puede crear una columna "Total" como

DataTable1.Columns.Add("Total", typeof(Double)); DataTable1.Columns["Total"].Expression = "C1+C2+C3";


Prueba esto.

DataTable1.Columns.Add("Total", typeof(Double)); foreach (DataRow row in DataTable1.Rows) { int sum = row.Columns.Cast<DataColumn>().Sum(dc=>(int)row[dc]); row.SetField("Total", sum); }


Puedes usar este ciclo:

table.Columns.Add("Total", typeof(decimal)); foreach (DataRow row in table.Rows) { decimal rowSum = 0; foreach (DataColumn col in table.Columns) { if(!row.IsNull(col)) { string stringValue = row[col].ToString(); decimal d; if(decimal.TryParse(stringValue, out d)) rowSum += d; } } row.SetField("Total", rowSum); }

Esto debería funcionar con cualquier tipo de columna.


Voy a probar algo como esto:

foreach (DataRow row in table.Rows) { var rowSum = 0d; foreach (DataColumn column in row.Table.Columns) { //if row[column] is number rowSum += Convert.ToDouble(row[column])); //} } //at his point you have the the colums sum }


DataTable1.Columns.Add("C1", typeof(Double)); DataTable1.Columns.Add("C2", typeof(Double)); DataTable1.Columns.Add("C3", typeof(Double)); DataTable1.Columns.Add("Total", typeof(Double)); DataTable1.Columns["Total"].Expression = "C1+C2+C3";

Esta es la manera más fácil .. !