2010-09-20 28 views
14

¿Es posible agregar una nueva fila a una tabla de datos en C# con solo 1 línea de código? Sólo estoy dummying algunos datos para una prueba y parece bastante lento a tener que escribir algo como esto:Cómo agregar una nueva fila a C# DataTable en 1 línea de código?

DataTable dt= new DataTable("results"); 
DataRow dr1 = dt.NewRow(); 
dr1[0] = "Sydney"; 
dt.Rows.Add(dr1); 
DataRow dr2 = dt.NewRow(); 
dr2[0] = "Perth"; 
dt.Rows.Add(dr2); 
DataRow dr3 = dt.NewRow(); 
dr3[0] = "Darwin"; 
dt.Rows.Add(dr3); 

estaba asumiendo que podría hacer algo así como el código de abajo, pero no puedo encontrar la sintaxis correcta

dt.Rows.Add(dt.NewRow()[0]{"Sydney"}); 
dt.Rows.Add(dt.NewRow()[0]{"Perth"}); 
dt.Rows.Add(dt.NewRow()[0]{"Darwin"}); 

Y sí sé que en el tiempo que he tomado para escribir esta pregunta podría haber acabado de codificación es el camino más largo en lugar de dilatar al respecto :)

Gracias!

Respuesta

19

Sí, puede hacer lo siguiente:

dt.Rows.Add("Sydney"); 
+4

No es necesario crear una matriz. Ya acepta un argumento de matriz 'params'. –

+0

@ Pierre-Alain Vigeant - ahah ¡Ya veo! Puedo ir a 'dt.Rows.Add (" Sydney ");' – JumpingJezza

3

Si usted está haciendo esto para pruebas unitarias, ¿por qué no usar un método de ayuda, ya sea de alguna clase estática, o mejor aún una clase base de pruebas ?

Tengo todas las clases de prueba heredadas de una clase TestBase, donde puedo agregar cosas para ayudar con todas las pruebas.

por ejemplo

[TestClass] 
public class TestBase 
{ 
    protected void AddMockDataRow(DataTable dt) 
    { 
     DataRow dr = dt.NewRow(); 
     dr[0] = "Sydney"; // or you could generate some random string. 
     dt.Rows.Add(dr); 
    } 
} 

Luego, en su clase de prueba:

[TestClass] 
public class SomeTest : TestBase 
{ 
    [TestMethod] 
    public void Ensure_Something_Meets_Some_Condition() 
    { 
     // Arrange. 
     DataTable dt = new DataTable("results"); 

     // Act. 
     AddMockDataRow(dt); 

     // Assert. 
     Assert.IsTrue(someCondition); 
    } 
} 

El objetivo aquí es mantener su código de prueba mínima y reducir el código redundante (no ser SECO).

HTH

+0

Ah, si lo estuviera haciendo correctamente y usando Unit Tests, este sería el camino a seguir. – JumpingJezza

+0

@JumpingJezza - Leí la declaración "Estoy simplemente volviendo datos para una prueba", ya que ESTABA creando pruebas unitarias. – RPM1984

+0

lo siento por engañarlo, pero solo estoy sacando un código del proyecto principal y creando un nuevo proyecto para probar algunas funcionalidades específicas, en lugar de la forma adecuada de crear pruebas unitarias. :) – JumpingJezza

2

Otra forma sería la de hacer una función auxiliar para hacerlo:

DataTable MakeDataTable(String name, String contents) 
{ 
    DataTable dt = new DataTable(name); 
    foreach (string val in contents.Split(",")) 
    { 
    DataRow dr = dt.NewRow(); 
    dr[0] = val; 
    dt.Rows.Add(dr); 
    } 
    return dt; 
} 

MakeDataTable("results","Sydney,Perth,Darwin"); 
0

DataTable dtStudent = new DataTable();

//Add new column 
dtStudent.Columns.AddRange (
new DataColumn[] { 
new DataColumn("SlNo", typeof(int)), 
new DataColumn("RollNumber", typeof(string)), 
new DataColumn("DateOfJoin", typeof(DateTime)), 
new DataColumn("Place", typeof(string)), 
new DataColumn("Course", typeof(string)), 
new DataColumn("Remark", typeof(string)) 
} 
); 
// Add value to the related column 
dtStudent.Rows.Add(1, "10001", DateTime.Now, "Bhubaneswar", "MCA", "Good"); 
Cuestiones relacionadas