c# agregue un DataRow a una tabla en una función separada

Necesito agregar algunas "filas totales" a una tabla. El código que estoy usando actualmente para los subtotales es:

DataRow shRow = ds.Tables[0].NewRow();
shRow["a"] = "SubHead";
shRow["b"] = "Wheel Subs";
shRow["c"] = totalWheels;

Como necesito totales y subtotales y subsubtotales, tengo que cortar y pegar este código (cambiando los valores) para cada nuevo subtotal.

Me gustaría tener una función que tome la tabla y los valores actuales y agregue la nueva fila. Algo como:

public DataRow SubRow(DataTable ResultsTable, string SubHead, string SubHeader, string SubHeadValue)

Eso actualizaría la tabla en la función principal.

Gracias por cualquier ayuda. Simplemente no puedo 'pasar' la tabla hacia y desde la nueva función.

preguntado el 12 de junio de 12 a las 17:06

2 Respuestas

¿Qué está mal con eso?

public DataRow SubRow(DataTable resultsTable, string subHead, string subHeader, string subHeadValue)
{
    DataRow shRow = resultsTable.NewRow();
    shRow["a"] = subHead;
    shRow["b"] = subHeader;
    shRow["c"] = subHeadValue;
    return shRow;
}

Uso:

DataRow shRow = SubRow(ds.Tables[0], "SubHead", "Wheel Subs", totalWheels);

Por cierto, esto no agregará la fila a la tabla, sino que solo creará una fila que pueda encajar en la tabla apropiadamente. Si realmente desea AGREGAR la fila a la tabla, puede hacerlo:

DataRow row = ds.Tables[0].Rows.Add("SubHead", "Wheel Subs", totalWheels);

Eso agregará una fila con los valores dados al método Agregar a la tabla de datos y devolverá la fila que se agregó.

Respondido el 12 de junio de 12 a las 17:06

Me gustaría tener una función que tome la tabla y los valores actuales y agregue la nueva fila

public DataTable CreateNewRow(DataTable ResultsTable, String ColumnA, 
      String ColumnB, String ColumnC, String ColumnAVal, String ColumnBVal, 
      String ColumnCVal)
{
    DataRow shRow = ResultsTable.NewRow();
    shRow[ColumnA] = ColumnAVal;
    shRow[ColumnB] = ColumnBVal;
    shRow[ColumnC] = ColumnCVal;
    ResultsTable.Rows.Add(shRow);
    return ResultsTable; 
}

using(DataTable ResultsTable = CreateNewRow
                               (
                                  ds.Tables[0], 
                                  "a",
                                  "b",
                                  "c",
                                  "SubHead", 
                                  "Wheel Subs", 
                                  totalWheels
                               ))
{
      //Your logic
}

Respondido el 12 de junio de 12 a las 17:06

¿Por qué demonios querría deshacerse de toda la tabla de datos después de agregarle una fila? Creo que necesita esa mesa con vida. En un tema diferente: si desea agregar la fila a la tabla, no necesita un método porque ya existe uno en el marco (vea mi respuesta), y creo que es más lógico devolver la fila de datos agregada en lugar de la tabla de datos, en general. - Var simple

Es una buena práctica para dispose los objetos una vez que haya terminado de usarlo. y debe colocarse dentro Using declaración. Además de esto, los datos permanecerán allí después de eliminarlos hasta que las filas/columnas se borren manualmente. Pero después de desecharlo, el trabajo de administración de la memoria está hecho y las fugas ya no estarán allí. - Pankaj

La sobrecarga que acepta parámetros de objeto devuelve la fila de datos que se ha agregado. Pegue a VS y compruébelo usted mismo. - Var simple

Y simplemente no creo que haya terminado de usarlo, eso es lo que quise decir. Desconocemos el alcance de la tabla de datos y, dado que él accede a ella a través de ds.Tables[0], probablemente no sea nuestra disposición. - Var simple

En los Declaración de uso Mencioné el tu logica. La lógica completa debe escribirse aquí. Así que una vez que DataTable el trabajo estará hecho, el objeto será disposed automáticamente después de salir de este scope. - Pankaj

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.