Principales respuestas
llenar un datatable con varios textbox

Pregunta
-
necesito llenar un datatable con varios textbox , ahorita lo tengo con puro if pero ocupo mucho espacio, hay una forma de simplificar.
DataTable dt = new DataTable();
if (Planta1PesoAceite.Text != "0")
dt.Columns.Add("Nombre");
dt.Columns.Add("T");
dt.Columns.Add("I");
dt.Columns.Add("Kg");
dt.Columns.Add("SI");
dt.Columns.Add("NO");
{
DataRow row = dt.NewRow();
row["Nombre"] = Nombre2.Text;
row["T"] = "X";
row["I"] = "";
row["Kg"] =planta1PesoAceite.Text;
row["SI"] = "";
row["NO"] = "";
dt.Rows.Add(row);
}
if (planta1PesoAgua.Text != "0")
{
DataRow row = dt.NewRow();
row["Nombre"] = nombreAgua.Text;
row["T"] = "X";
row["Kg"] = planta1Pesoagua.Text;
row["SI"] = "";
row["NO"] = "";
dt.Rows.Add(row);
}
if (planta1PesoBal.Text != "0")
{
DataRow row = dt.NewRow();
row["Nombre"] = NombreBala.Text;
row["T"] = "X";
row["I"] = "";
row["Kg"] = planta1PesoB.Text;
row["SI"] = "";
row["NO"] = "";
dt.Rows.Add(row);
}
Respuestas
-
Puedes pasar las seis columnas directamente al dt.Rows.Add (tiene una sobrecarga que acepta directamente todas las columnas en lugar de un Row). Esto reduce el contenido de cada "if" a una sola línea de código.
if (Planta1PesoAceite.Text != "0") { dt.Rows.Add(Nombre2.Text, "X", "", planta1PesoAceite.Text, "", ""); }
Y lo mismo los otros bloques.- Marcado como respuesta danielglez miércoles, 16 de octubre de 2019 13:24
-
No sé si me estoy perdiendo algo, pero me da la impresión de que estás examinando todo el rato la fila cero, Rows[0], en lugar de usar la fila sobre la que está iterando el "foreach", row. Aparte de eso, no estás cambiando dentro del bucle el valor de la variable i, por lo que siempre "machacas" la misma celda en $"A{i}", en lugar de ir pasando a una celda nueva en cada iteración.
int i=1; foreach (DataRow row in dt.Rows) { if (row[11].ToString() == "planta1") { ws.Cells[$"A{i++}"].Value = row[0]; } }
- Marcado como respuesta danielglez miércoles, 16 de octubre de 2019 18:34
Todas las respuestas
-
Puedes pasar las seis columnas directamente al dt.Rows.Add (tiene una sobrecarga que acepta directamente todas las columnas en lugar de un Row). Esto reduce el contenido de cada "if" a una sola línea de código.
if (Planta1PesoAceite.Text != "0") { dt.Rows.Add(Nombre2.Text, "X", "", planta1PesoAceite.Text, "", ""); }
Y lo mismo los otros bloques.- Marcado como respuesta danielglez miércoles, 16 de octubre de 2019 13:24
-
-
no se si este bien como lo estoy pensndo pero haz de cuenta que si este bien pero la idea es que si peso del aceite de la primera planta es mayor o diferente a 0 se llena el datatable, igual si el peso del agua es mayor a 0, se agreg un row, por lo tanto son 2 row, pero nomas me imprime el ultimo nombre. lo estoy mandando a un excel y por epplus
foreach (DataRow row in dt.Rows)
{
if (dt.Rows[0][11].ToString() == "planta1") { ws.Cells[$"A{i}"].Value = row[0]; }
}del ejemplo de hace rato agrege otra columna que diga planta, y se inserta planta 1
-
No sé si me estoy perdiendo algo, pero me da la impresión de que estás examinando todo el rato la fila cero, Rows[0], en lugar de usar la fila sobre la que está iterando el "foreach", row. Aparte de eso, no estás cambiando dentro del bucle el valor de la variable i, por lo que siempre "machacas" la misma celda en $"A{i}", en lugar de ir pasando a una celda nueva en cada iteración.
int i=1; foreach (DataRow row in dt.Rows) { if (row[11].ToString() == "planta1") { ws.Cells[$"A{i++}"].Value = row[0]; } }
- Marcado como respuesta danielglez miércoles, 16 de octubre de 2019 18:34
-