¿Cómo crear una DataTable en C # y cómo agregar filas?

196

¿Cómo crear una DataTable en C #?

Me gustó esto:

 DataTable dt = new DataTable();
 dt.clear();
 dt.Columns.Add("Name");
 dt.Columns.Add("Marks");

¿Cómo veo la estructura de DataTable?

Ahora quiero agregar ravi para Namey 500 para Marks. ¿Cómo puedo hacer esto?

Lindo
fuente
2
@Lindo. Solo un comentario: si está utilizando .NET 3.5, realmente debería ver lo que ofrece LINQ to SQL. Si decide ir por la ruta DataTable / DataSet, al menos busque crear DataTables que estén fuertemente tipadas.
RichardOD

Respuestas:

256

Aquí está el código:

DataTable dt = new DataTable(); 
dt.Clear();
dt.Columns.Add("Name");
dt.Columns.Add("Marks");
DataRow _ravi = dt.NewRow();
_ravi["Name"] = "ravi";
_ravi["Marks"] = "500";
dt.Rows.Add(_ravi);

Para ver la estructura, o más bien lo reformularía como esquema, puede exportarlo a un archivo XML haciendo lo siguiente.

Para exportar solo el esquema / estructura, haga:

dt.WriteXMLSchema("dtSchemaOrStructure.xml");

Además, también puede exportar sus datos:

dt.WriteXML("dtDataxml");
esta. __curious_geek
fuente
8
La clase DataTable no tiene el método AddRow. Tienes que hacer dt.Rows.Add (_ravi); en su lugar
Salamander2007
1
Y no hay tal cosa como AddRow. Es DataTable.Rows.Add ()
djdd87
No olvide llamar a dt.AcceptChanges () en caso de que use DataView con un filtro que no sea CurrentRows.
Salamander2007
@DanD, @ Salamander2007: de acuerdo. Lo cambié ahora. Sry por el error, eso sucedió porque utilizo conjuntos de datos mecanografiados que admiten esto.
esto. __curious_geek
@ Phoenix: Solo quería que el que preguntaba se relacionara felizmente con mi respuesta.
esto. __curious_geek
65

También puede pasar una matriz de objetos, así:

DataTable dt = new DataTable();
dt.Clear();
dt.Columns.Add("Name");
dt.Columns.Add("Marks");
object[] o = { "Ravi", 500 };
dt.Rows.Add(o);

O incluso:

dt.Rows.Add(new object[] { "Ravi", 500 });
James McConnell
fuente
11
Otra alternativa a esto es observar que el Addmétodo que se muestra arriba tiene una sobrecarga con un número variable de parámetros, por lo que podría acortar esto dt.Rows.Add("Ravi", 500);y funcionaría igual. Una gran advertencia con cualquiera de estos enfoques: debe proporcionar estos parámetros exactamente en el mismo orden en que se definieron las columnas; de lo contrario, obtendrá un error. (¡Así que use con precaución!)
Funka
34
// Create a DataTable and add two Columns to it
DataTable dt=new DataTable();
dt.Columns.Add("Name",typeof(string));
dt.Columns.Add("Age",typeof(int));

// Create a DataRow, add Name and Age data, and add to the DataTable
DataRow dr=dt.NewRow();
dr["Name"]="Mohammad"; // or dr[0]="Mohammad";
dr["Age"]=24; // or dr[1]=24;
dt.Rows.Add(dr);

// Create another DataRow, add Name and Age data, and add to the DataTable
dr=dt.NewRow();
dr["Name"]="Shahnawaz"; // or dr[0]="Shahnawaz";
dr["Age"]=24; // or dr[1]=24;
dt.Rows.Add(dr);

// DataBind to your UI control, if necessary (a GridView, in this example)
GridView1.DataSource=dt;
GridView1.DataBind();
shahnawaz
fuente
29

Crear tabla de datos:

DataTable MyTable = new DataTable(); // 1
DataTable MyTableByName = new DataTable("MyTableName"); // 2

Agregar columna a la tabla:

 MyTable.Columns.Add("Id", typeof(int));
 MyTable.Columns.Add("Name", typeof(string));

Agregar fila al método 1 de DataTable:

DataRow row = MyTable.NewRow();
row["Id"] = 1;
row["Name"] = "John";
MyTable.Rows.Add(row);

Agregar fila al método 2 de DataTable:

MyTable.Rows.Add(2, "Ivan");

Agregar fila al método 3 de DataTable (Agregar fila de otra tabla por la misma estructura):

MyTable.ImportRow(MyTableByName.Rows[0]);

Agregar fila al método 4 de DataTable (Agregar fila de otra tabla):

MyTable.Rows.Add(MyTable2.Rows[0]["Id"], MyTable2.Rows[0]["Name"]);

Agregar fila al método 5 de DataTable (Insertar fila en un índice):

MyTable.Rows.InsertAt(row, 8);
Hamed Naeemaei
fuente
24

Para agregar una fila:

DataRow row = dt.NewRow();
row["Name"] = "Ravi";
row["Marks"] = 500;
dt.Rows.Add(row);

Para ver la estructura:

Table.Columns
djdd87
fuente
18

Puede escribir una línea usando DataRow.Add (valores del objeto params []) en lugar de cuatro líneas.

dt.Rows.Add("Ravi", "500");

A medida que crea un nuevo DataTableobjeto, parece que no es necesario Clear DataTableen la siguiente declaración. También puede usar DataTable.Columns.AddRangepara agregar columnas con la instrucción on. El código completo sería.

DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[] { new DataColumn("Name"), new DataColumn("Marks") });     
dt.Rows.Add("Ravi", "500");
Adil
fuente
14

Puedes agregar Fila en una sola línea

    DataTable table = new DataTable();
    table.Columns.Add("Dosage", typeof(int));
    table.Columns.Add("Drug", typeof(string));
    table.Columns.Add("Patient", typeof(string));
    table.Columns.Add("Date", typeof(DateTime));

    // Here we add five DataRows.
    table.Rows.Add(25, "Indocin", "David", DateTime.Now);
    table.Rows.Add(50, "Enebrel", "Sam", DateTime.Now);
    table.Rows.Add(10, "Hydralazine", "Christoff", DateTime.Now);
    table.Rows.Add(21, "Combivent", "Janet", DateTime.Now);
    table.Rows.Add(100, "Dilantin", "Melanie", DateTime.Now);
Diego
fuente
11
DataTable dt=new DataTable();
Datacolumn Name = new DataColumn("Name");
Name.DataType= typeoff(string);
Name.AllowDBNull=false; //set as null or not the default is true i.e null
Name.MaxLength=20; //sets the length the default is -1 which is max(no limit)
dt.Columns.Add(Name);
Datacolumn Age = new DataColumn("Age", typeoff(int));`

dt.Columns.Add(Age);

DataRow dr=dt.NewRow();

dr["Name"]="Mohammad Adem"; // or dr[0]="Mohammad Adem";
dr["Age"]=33; // or dr[1]=33;
dt.add.rows(dr);
dr=dt.NewRow();

dr["Name"]="Zahara"; // or dr[0]="Zahara";
dr["Age"]=22; // or dr[1]=22;
dt.rows.add(dr);
Gv.DataSource=dt;
Gv.DataBind();
Mohammed Shafi Adem
fuente
9
DataTable dt=new DataTable();
DataColumn Name = new DataColumn("Name",typeof(string)); 

dt.Columns.Add(Name);
DataColumn Age = new DataColumn("Age", typeof(int));`

dt.Columns.Add(Age);

DataRow dr=dt.NewRow();

dr["Name"]="Kavitha Reddy"; 
dr["Age"]=24; 
dt.add.Rows(dr);
dr=dt.NewRow();

dr["Name"]="Kiran Reddy";
dr["Age"]=23; 
dt.Rows.add(dr);
Gv.DataSource=dt;
Gv.DataBind();
kavitha Reddy
fuente
8

Debe agregar filas de datos a su tabla de datos para esto.

// Creates a new DataRow with the same schema as the table.
DataRow dr = dt.NewRow();

// Fill the values
dr["Name"] = "Name";
dr["Marks"] = "Marks";

// Add the row to the rows collection
dt.Rows.Add ( dr );
rahul
fuente
8

La forma más fácil es crear una DtaTable a partir de ahora

DataTable table = new DataTable
{
    Columns = {
        "Name", // typeof(string) is implied
        {"Marks", typeof(int)}
    },
    TableName = "MarksTable" //optional
};
table.Rows.Add("ravi", 500);
naveen
fuente
4

Además de las otras respuestas.

Si controla la estructura de la DataTable, hay un acceso directo para agregar filas:

// Supongamos que tiene una tabla de datos definida como en su ejemplo llamada dt dt.Rows.Add ("Nombre", "Marcas");

El método DataRowCollection.Add () tiene una sobrecarga que toma una matriz param de objetos. Este método le permite pasar tantos valores como sea necesario, pero deben estar en el mismo orden en que se definen las columnas en la tabla.

Entonces, si bien esta es una forma conveniente de agregar datos de fila, puede ser riesgoso usarla. Si la estructura de la tabla cambia, su código fallará.

Runa Grimstad
fuente
1

Pregunta 1: ¿Cómo crear una DataTable en C #?

Respuesta 1:

DataTable dt = new DataTable(); // DataTable created

// Add columns in your DataTable
dt.Columns.Add("Name");
dt.Columns.Add("Marks");

Nota: No hay necesidad deClear()laDataTabledespués de crearlo.

Pregunta 2: ¿Cómo agregar fila (s)?

Respuesta 2: agregue una fila:

dt.Rows.Add("Ravi","500");

Agregue varias filas: use el ForEachbucle

DataTable dt2 = (DataTable)Session["CartData"]; // This DataTable contains multiple records
foreach (DataRow dr in dt2.Rows)
{
    dt.Rows.Add(dr["Name"], dr["Marks"]);
}
5377037
fuente