Jak utworzyć DataTable w C # i jak dodawać wiersze?

197

Jak utworzyć DataTable w C #?

Podobało mi się to:

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

Jak widzę strukturę DataTable?

Teraz chcę dodać ravi dla Namei 500 dla Marks. W jaki sposób mogę to zrobić?

Uroczy
źródło
2
@Uroczy. Tylko komentarz - jeśli używasz .NET 3.5, powinieneś naprawdę zobaczyć, co oferuje LINQ to SQL. Jeśli zdecydujesz się zejść trasą DataTable / DataSet, przynajmniej spójrz na tworzenie DataTables, które są silnie wpisane.
RichardOD

Odpowiedzi:

256

Oto kod:

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

Aby zobaczyć strukturę, a raczej przeformułować ją jako schemat, możesz wyeksportować ją do pliku XML, wykonując następujące czynności.

Aby wyeksportować tylko schemat / strukturę, wykonaj:

dt.WriteXMLSchema("dtSchemaOrStructure.xml");

Dodatkowo możesz również wyeksportować swoje dane:

dt.WriteXML("dtDataxml");
to. __curious_geek
źródło
8
Klasa DataTable nie ma metody AddRow. Musisz zrobić dt.Rows.Add (_ravi); zamiast tego
Salamander2007
1
I nie ma czegoś takiego jak AddRow. It's DataTable.Rows.Add ()
djdd87
Nie zapomnij wywołać dt.AcceptChanges (), jeśli używasz DataView z filtrem innym niż CurrentRows.
Salamander2007
@DanD, @ Salamander2007: uzgodniono. Zmieniłem to teraz. Przepraszam za błąd, który się zdarzył, bo używam zestawów danych, które obsługują tę rzecz.
to. __curious_geek
@ phoenix: Chciałem tylko, aby pytający z radością odnosił się do mojej odpowiedzi.
to. __curious_geek
66

Możesz również przekazać tablicę obiektów, na przykład:

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

Lub nawet:

dt.Rows.Add(new object[] { "Ravi", 500 });
James McConnell
źródło
11
Inną alternatywą jest zwrócenie uwagi na to, że Addmetoda pokazana powyżej ma przeciążenie ze zmienną liczbą parametrów, więc można to skrócić dt.Rows.Add("Ravi", 500);i działać tak samo. Jedno duże ostrzeżenie z jednym z tych podejść: musisz podać te parametry w dokładnie takiej samej kolejności, w jakiej zdefiniowano kolumny, w przeciwnym razie pojawi się błąd. (Więc używaj ostrożnie!)
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
źródło
29

Utwórz DataTable:

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

Dodaj kolumnę do tabeli:

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

Dodaj wiersz do metody DataTable 1:

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

Dodaj wiersz do metody DataTable 2:

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

Dodaj wiersz do metody DataTable 3 (Dodaj wiersz z innej tabeli według tej samej struktury):

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

Dodaj wiersz do metody DataTable 4 (Dodaj wiersz z innej tabeli):

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

Dodaj wiersz do metody DataTable 5 (Wstaw wiersz przy indeksie):

MyTable.Rows.InsertAt(row, 8);
Hamed Naeemaei
źródło
24

Aby dodać wiersz:

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

Aby zobaczyć strukturę:

Table.Columns
djdd87
źródło
18

Możesz napisać jedną linijkę za pomocą DataRow.Add (wartości parametrów obiektu []) zamiast czterech linii.

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

Kiedy tworzysz nowy DataTableobiekt, wydaje się, że nie ma takiej potrzeby Clear DataTablew następnej instrukcji. Możesz także użyć DataTable.Columns.AddRangedo dodania kolumn za pomocą instrukcji on. Pełny kod byłby.

DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[] { new DataColumn("Name"), new DataColumn("Marks") });     
dt.Rows.Add("Ravi", "500");
Adil
źródło
14

Możesz dodać wiersz w jednym wierszu

    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
źródło
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
źródło
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
źródło
8

W tym celu musisz dodać datarows do swojej bazy danych.

// 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
źródło
8

Najłatwiejszym sposobem jest utworzenie DtaTable od teraz

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

Oprócz innych odpowiedzi.

Jeśli kontrolujesz strukturę DataTable, istnieje skrót do dodawania wierszy:

// Załóżmy, że masz tabelę danych zdefiniowaną jak w twoim przykładzie o nazwie dt dt.Rows.Add („Name”, „Marks”);

Metoda DataRowCollection.Add () ma przeciążenie, które zajmuje tablicę parametrów. Ta metoda pozwala przekazać tyle wartości, ile potrzeba, ale muszą one być w tej samej kolejności, w jakiej kolumny są zdefiniowane w tabeli.

Chociaż jest to wygodny sposób dodawania danych wierszy, jego użycie może być ryzykowne. Jeśli zmieni się struktura tabeli, kod się nie powiedzie.

Rune Grimstad
źródło
1

Pytanie 1: Jak utworzyć DataTable w C #?

Odpowiedź 1:

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

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

Uwaga: Nie ma potrzeby, abypo jego utworzeniu.Clear()DataTable

Pytanie 2: Jak dodać wiersz (y)?

Odpowiedź 2: Dodaj jeden wiersz:

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

Dodaj wiele wierszy: użyj ForEachpętli

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