consistono in tabelle formate da colonne e righe inserite in memoria

Creazione tabella in memoria

sintassi: creazione tabella
DataTable oggetto = new DataTable();

creazione colonne
oggetto.Columns.Add("nome colonna 1", typeof(tipo_variaible));
oggetto.Columns.Add("nome colonna 2", typeof(tipo_variaible));
....

creazione righe
table.Rows.Add(valore colonna 1, valore colonna 2, ....);
table.Rows.Add(valore colonna 1, valore colonna 2, ....);


esempio: creo metodo GetTable che crea una tabella in memoria
static void Main()
{

DataTable table = GetTable(); creo oggetto ed evoco metodo
}

static DataTable GetTable()
{
DataTable table = new DataTable();
colonne
table.Columns.Add("Dosage", typeof(int));
table.Columns.Add("Drug", typeof(string));
table.Columns.Add("Date", typeof(DateTime));
righe
table.Rows.Add(10, "Hydralazine", DateTime.Now);
table.Rows.Add(21, "Combivent", DateTime.Now);
table.Rows.Add(100, "Dilantin", DateTime.Now);

return table;
}

esempio: creiamo e carichiamo in memoria una Datatable da un file txt
string[] righe = File.ReadAllLines("file.txt"); carichiamo il file txt in memoria creando un array per ciascuna riga
string[] riga;

Inseriamo le colonne dai dati della prima riga
riga = righe[0].Split('/'); creiamo in array splittando la prima riga
for (int i = 0; i < riga.Length; i++)
ListaVideo.Columns.Add(riga[i].Trim(), riga[i].Trim() == "Serie" ? typeof(int) : riga[i].Trim() == "Puntata" ? typeof(int) : typeof(string));

Inseriamo le righe dal resto delle righe del testo
for (int i = 1; i < righe.Length; i++)
{

riga = righe[i].Split('/'); creiamo in array splttando la riga corrente

DataRow riganuova = ListaVideo.NewRow(); oggetto riga corrente da costruire

for (int z = 0; z < riga.Length; z++)
{
if (!string.IsNullOrEmpty(riga[z].Trim()))
riganuova[z] = riga[z].Trim(); diamo un valore allo specifico elemento della riga del Datatable se questo non é vuoto
}

ListaVideo.Rows.Add(riganuova);aggiungi alla Datatable in meoria la riga nuova
}

esempio: scriviamo un file txt in da una Datatable in memoria
Ordina per Tipo e Nome in caso ne aggiungi a mano
NOMEDATATABLE.DefaultView.Sort = "Campo 1 ASC, Campo 2 DESC"; ordino i campi prima dal Campo 1 in ascendente ASC e dal campo 2 in discendente DESC in una DataView
NOMEDATATABLE = NOMEDATATABLE.DefaultView.ToTable(); sovrascrivo la DATATABLE in base alla nuova DataView ordinata

StreamWriter filetesto = new StreamWriter("file testo.txt", false); apro il file di testo con sovrascrittura (fasle)

scrivi i nomi delle colonne in cima al file
for (int i = 0; i < ListaVideo.Columns.Count; i++)
filetesto.Write(ListaVideo.Columns[i].ToString().Trim() + (i == ListaVideo.Columns.Count-1 ? "" : " / ")); scrivo in riga i vari elementi separandoli con un / tranne che per l'ultimo

filetesto.WriteLine(); vado sotto di una riga

scrivi le righe di seguito
foreach (DataRow row in ListaVideo.Rows)
{

object[] elemento = row.ItemArray;

for (int i = 0; i < elemento.Length; i++)
filetesto.Write(elemento[i].ToString().Trim() + (i == elemento.Length - 1 ? "" : " / "));

filetesto.WriteLine();
}

chiudi il file
filetesto.Close();




Gestione della tabella memorizzata
ci sono vari metodi da utilizzare per le righe e colonne

metodi
table.Rows. .... ; sulle righe
table.Columns. .... ; sulle colonne

table.Rows[ID riga]. .... ; su una specifica righe
table.Columns[ID riga]. .... ; su una colonna colonne per ID
table.Columns["nome colonna"]. .... ; su una colonne per nome


table.Rows[ID riga][ID colonna] .... ; indetifica un o specifico elemento

esempio: modifico un dato elemento
elenco.Rows[2][3] = "testo prova" ; modifico un elemento in testo prova


su copia degli elementi
.ItemArray crea array degli elementi (tutti di tipo object) ma solo una copia degli elementi non quelli reali
.ItemArray[ID] identifica uno specifico item della riga selezionata, solo una copia


.Count conta le righe o le colonne

esempio: si usa spesso nei cicli for
for (int i = 0; i < table.Columns.Count; i++) .....



.Delete() cancello una riga

esempio:
table.Rows[ID].Delete; cancello a riga



.Remove(...) rimuove una riga

esempio:
DataRow row = table.Rows[0]; creo una variabile relativa alla riga
table.Rows.Remove(row); rimuovo la riga

esempio: ciclo foeach per ciascuna riga della tabella, e analisi di ciascun elemento della riga
foreach (DataRow riga in table.Rows) per ciascuna riga (DataRow) della tabella
{

object[] elemento = riga.ItemArray; creo array degli elementi della riga
...;
}


.Clear cancella il contenuto
table.Clear cancello il contenuto delle righe, ma non i nomi delle colonne
table.Colums.Clear cancello i nomi delle colonne


.NewRow() inserimento di una nuova riga

esempio:
DataRow workRow = table.NewRow(); creo una nuova riga

modificare la riga appena aggiunta utilizzando un indice o il nome della colonna
workRow["CustLName"] = "Smith"; inserire dato in base al nome colonna

workRow[0] = "Jone"; inserire il dato in base all'indice colonna
workRow[1] = "Smith";

dataset.Rows.Add(workRow); dopo aver inserito i valori degli elementi va aggiunta al Datatable