Как создать DataTable в C # и как добавить строки?

197

Как создать DataTable в C #?

Я сделал это так:

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

Как я вижу структуру DataTable?

Теперь я хочу добавить ravi для Nameи 500 для Marks. Как я могу это сделать?

Милый
источник
2
@Милый. Просто комментарий - если вы используете .NET 3.5, вы действительно должны увидеть, что предлагает LINQ to SQL. Если вы решили пойти по маршруту DataTable / DataSet, по крайней мере, посмотрите на создание DataTables со строгой типизацией.
RichardOD

Ответы:

256

Вот код:

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);

Чтобы увидеть структуру, точнее, перефразировать ее как схему, вы можете экспортировать ее в файл XML, выполнив следующие действия.

Чтобы экспортировать только схему / структуру, выполните:

dt.WriteXMLSchema("dtSchemaOrStructure.xml");

Кроме того, вы также можете экспортировать свои данные:

dt.WriteXML("dtDataxml");
этот. __curious_geek
источник
8
Класс DataTable не имеет метода AddRow. Вы должны сделать dt.Rows.Add (_ravi); вместо этого
Salamander2007
1
И нет такой вещи, как AddRow. Это DataTable.Rows.Add ()
djdd87
Не забудьте вызвать dt.AcceptChanges (), если вы используете DataView с фильтром, отличным от CurrentRows.
Salamander2007
@DanD, @ Salamander2007: согласился. Я изменил это сейчас. Прошу прощения за ошибку, которая произошла, потому что я использую типизированные наборы данных, которые поддерживают эту вещь.
это __curious_geek
@phoenix: Я просто хотел, чтобы спрашивающий вопрос был рад связан с моим ответом.
это __curious_geek
66

Вы также можете передать массив объектов, например, так:

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

Или даже:

dt.Rows.Add(new object[] { "Ravi", 500 });
Джеймс Макконнелл
источник
11
Другая альтернатива в этом заключается в том, чтобы отметить, что Addметод, показанный выше, имеет перегрузку с переменным числом параметров, так что вы можете сократить это до dt.Rows.Add("Ravi", 500);и работать так же. Одно большое предупреждение с любым из этих подходов: вы должны предоставить эти параметры в том же порядке, в котором были определены столбцы, иначе вы получите ошибку. (Так что используйте с осторожностью!)
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
источник
30

Создать DataTable:

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

Добавить столбец в таблицу:

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

Добавьте строку в метод DataTable 1:

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

Добавьте строку в метод DataTable 2:

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

Добавить строку в метод DataTable 3 (Добавить строку из другой таблицы по той же структуре):

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

Добавить строку в метод DataTable 4 (Добавить строку из другой таблицы):

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

Добавить строку в метод DataTable 5 (вставить строку в индекс):

MyTable.Rows.InsertAt(row, 8);
Хамед Наимаэи
источник
24

Чтобы добавить строку:

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

Чтобы увидеть структуру:

Table.Columns
djdd87
источник
18

Вы можете написать один вкладыш, используя DataRow.Add (params object [] values) вместо четырех строк.

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

Когда вы создаете новый DataTableобъект, в следующем утверждении нет необходимости Clear DataTable. Вы также можете использовать DataTable.Columns.AddRangeдля добавления столбцов с оператором on. Полный код будет.

DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[] { new DataColumn("Name"), new DataColumn("Marks") });     
dt.Rows.Add("Ravi", "500");
Адиль
источник
14

Вы можете добавить строку в одну строку

    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);
Диего
источник
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();
Мохаммед Шафи Адем
источник
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();
Кавита Редди
источник
8

Для этого вы должны добавить dataows в свои данные.

// 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 );
Рахул
источник
8

Самый простой способ - создать DtaTable на данный момент.

DataTable table = new DataTable
{
    Columns = {
        "Name", // typeof(string) is implied
        {"Marks", typeof(int)}
    },
    TableName = "MarksTable" //optional
};
table.Rows.Add("ravi", 500);
Нэвин
источник
4

В дополнение к другим ответам.

Если вы управляете структурой DataTable, есть ярлык для добавления строк:

// Предположим, у вас есть таблица данных, определенная, как в вашем примере, с именем dt dt.Rows.Add ("Name", "Marks");

Метод DataRowCollection.Add () имеет перегрузку, которая принимает массив параметров param. Этот метод позволяет передавать столько значений, сколько необходимо, но они должны быть в том же порядке, в котором столбцы определены в таблице.

Таким образом, хотя это удобный способ добавления данных строк, его использование может быть рискованным. Если структура таблицы изменится, ваш код потерпит неудачу.

Руна Гримстад
источник
1

Вопрос 1: Как создать DataTable в C #?

Ответ 1:

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

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

Примечание: Там нет необходимостипосле его создания.Clear()DataTable

Вопрос 2: Как добавить строку (и)?

Ответ 2: Добавить одну строку:

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

Добавить несколько строк: использовать ForEachцикл

DataTable dt2 = (DataTable)Session["CartData"]; // This DataTable contains multiple records
foreach (DataRow dr in dt2.Rows)
{
    dt.Rows.Add(dr["Name"], dr["Marks"]);
}
5377037
источник