Proseguiamo con il post, cercherò il più possibile di suddividere i lavori, anche se sto notando quando il libro sia prolisso.
static void Main(string[] args)
{
/* le classi disconnesse sono elemeniti cardine del framework..
* La loro presenza risale alla versione 1.0
* Non sono mai state dichiarate come obsolete e sono di uso diffuso.
*
* la particolarità e che non sono connesse direttamente ai dati
*/
#region 01-09
Sample_01();
Sample_02();
Sample_03();
Sample_04();
Sample_05();
Sample_06();
Sample_07();
Sample_08();
Sample_09();
#endregion
Sample_10();
Sample_11();
Sample_12();
Sample_13();
Sample_14();
Sample_15();
Sample_16();
}
Ed ecco i nuovi sample ...
static void Sample_10()
{
// Utilizzo di Data View
//
// il dataview consente di creare una vista
// logica della tabella
// questo implica che per una dataTable
// possono esiste (nessuna - una - più ) dataview.
//
DataTable dt1 = new DataTable("NewDataTable");
DataColumn dc0 = new DataColumn("ID");
dc0.DataType = typeof(int);
dc0.AllowDBNull = false;
dc0.AutoIncrement = true;
dc0.AutoIncrementStep = 1;
dc0.AutoIncrementSeed = 1;
dt1.Columns.Add(dc0);
DataColumn dc1 = new DataColumn("Name");
dc1.DataType = typeof(string);
dc1.MaxLength = 50;
dc1.AllowDBNull = false;
dt1.Columns.Add(dc1);
DataColumn dc2 = new DataColumn("Description");
dc2.DataType = typeof(string);
dc2.MaxLength = 150;
dc2.AllowDBNull = true;
dt1.Columns.Add(dc2);
dt1.PrimaryKey = new DataColumn[] { dc0 };
DataRow dr1 = dt1.Rows.Add(new object[] { 1, "Fabio", "Team Leader" });
DataRow dr2 = dt1.Rows.Add(new object[] { 2, "Fabio", "Developer" });
DataRow dr3 = dt1.Rows.Add(new object[] { 3, "Fabio", "Tester" });
// ordina per descrizione
DataView dw_01 = new DataView(dt1);
dw_01.Sort = "Description Desc";
// ordina per id
DataView dw_02 = new DataView(dt1);
dw_02.Sort = "ID Desc";
// preleva solo la terza riga
DataView dw_03 = new DataView(dt1);
dw_03.RowFilter = "ID >2";
// preleva solo la riga uno e la riga 2
DataView dw_04 = new DataView(dt1);
dw_04.RowFilter = "Description Like '%l%'";
// è possibil indicare in un estrazione
// anche il tipo di dato che effettivamente
// vogliamo analizzare.
DataView dw_05 = new DataView(dt1);
dw_05.RowFilter = "Description Like '%l%'";
dw_05.RowStateFilter = DataViewRowState.Unchanged;
}
static void Sample_11()
{
// Utilizzo di Data View
//
// il dataview consente di creare una vista
// logica della tabella
// questo implica che per una dataTable
// possono esiste (nessuna - una - più ) dataview.
//
DataTable dt1 = new DataTable("NewDataTable");
DataColumn dc0 = new DataColumn("ID");
dc0.DataType = typeof(int);
dc0.AllowDBNull = false;
dc0.AutoIncrement = true;
dc0.AutoIncrementStep = 1;
dc0.AutoIncrementSeed = 1;
dt1.Columns.Add(dc0);
DataColumn dc1 = new DataColumn("Name");
dc1.DataType = typeof(string);
dc1.MaxLength = 50;
dc1.AllowDBNull = false;
dt1.Columns.Add(dc1);
DataColumn dc2 = new DataColumn("Description");
dc2.DataType = typeof(string);
dc2.MaxLength = 150;
dc2.AllowDBNull = true;
dt1.Columns.Add(dc2);
dt1.PrimaryKey = new DataColumn[] { dc0 };
DataRow dr1 = dt1.Rows.Add(new object[] { 1, "Fabio", "Team Leader" });
DataRow dr2 = dt1.Rows.Add(new object[] { 2, "Fabio", "Developer" });
DataRow dr3 = dt1.Rows.Add(new object[] { 3, "Fabio", "Tester" });
// ordina per descrizione
DataView dw_01 = new DataView(dt1);
dw_01.RowFilter = "Description like '%t%'";
var buffer = new System.Text.StringBuilder();
foreach (DataColumn dc in dw_01.Table.Columns)
{
buffer.AppendFormat("{0,15} ", dc.ColumnName);
}
buffer.Append("\r\n");
foreach (DataRowView dr in dw_01)
{
foreach (DataColumn dc in dw_01.Table.Columns)
{
buffer.AppendFormat("{0,15} ", dr.Row[dc]);
}
buffer.Append("\r\n");
}
Console.WriteLine(buffer.ToString());
}
static void Sample_12()
{
// Utilizzo di Data View
//
// Esportare da un dataview ad una data table
//
DataTable dt1 = new DataTable("NewDataTable");
DataColumn dc0 = new DataColumn("ID");
dc0.DataType = typeof(int);
dc0.AllowDBNull = false;
dc0.AutoIncrement = true;
dc0.AutoIncrementStep = 1;
dc0.AutoIncrementSeed = 1;
dt1.Columns.Add(dc0);
DataColumn dc1 = new DataColumn("Name");
dc1.DataType = typeof(string);
dc1.MaxLength = 50;
dc1.AllowDBNull = false;
dt1.Columns.Add(dc1);
DataColumn dc2 = new DataColumn("Description");
dc2.DataType = typeof(string);
dc2.MaxLength = 150;
dc2.AllowDBNull = true;
dt1.Columns.Add(dc2);
dt1.PrimaryKey = new DataColumn[] { dc0 };
DataRow dr1 = dt1.Rows.Add(new object[] { 1, "Fabio", "Team Leader" });
DataRow dr2 = dt1.Rows.Add(new object[] { 2, "Fabio", "Developer" });
DataRow dr3 = dt1.Rows.Add(new object[] { 3, "Fabio", "Tester" });
// ordina per descrizione
DataView dw_01 = new DataView(dt1);
dw_01.RowFilter = "Description like '%t%'";
DataTable dt2 = dw_01.ToTable("ntFromView", true, "ID", "Name", "Description");
}
static void Sample_13()
{
//
// utilizzo del dataSet
//
//
// creazione e composizione
// di un schema con 2 tabelle
// con chiave primaria e
// relazione.
//
DataSet ds = new DataSet("Colleghi");
DataTable dTipoCollega = ds.Tables.Add("TipoCollega");
dTipoCollega.Columns.Add("IDTipoCollega", typeof(int));
dTipoCollega.Columns.Add("TipoCollega", typeof(string));
dTipoCollega.Columns.Add("Descrizione", typeof(string));
dTipoCollega.PrimaryKey = new DataColumn[]{dTipoCollega.Columns["IDTipoCollega"]};
DataTable dCollega = ds.Tables.Add("Collega");
dCollega.Columns.Add("IDCollega", typeof(int));
dCollega.Columns.Add("IDTipoCollega", typeof(int));
dCollega.Columns.Add("Cognome", typeof(string));
dCollega.Columns.Add("Nome", typeof(string));
dCollega.Columns.Add("Eta", typeof(string));
dCollega.PrimaryKey = new DataColumn[] { dCollega.Columns["IDCollega"] };
ds.Relations.Add("rCollega_Tipo", dTipoCollega.Columns["IDTipoCollega"],
dCollega.Columns["IDCollega"]);
}
static void Sample_14()
{
// specializzazione di un dataset
DataSet ds = new DataSet("Colleghi");
DataTable dTipoCollega = ds.Tables.Add("TipoCollega");
dTipoCollega.Columns.Add("IDTipoCollega", typeof(int));
dTipoCollega.Columns.Add("TipoCollega", typeof(string));
dTipoCollega.Columns.Add("Descrizione", typeof(string));
dTipoCollega.PrimaryKey = new DataColumn[] { dTipoCollega.Columns["IDTipoCollega"] };
DataTable dCollega = ds.Tables.Add("Collega");
dCollega.Columns.Add("IDCollega", typeof(int));
dCollega.Columns.Add("IDTipoCollega", typeof(int));
dCollega.Columns.Add("Cognome", typeof(string));
dCollega.Columns.Add("Nome", typeof(string));
dCollega.Columns.Add("Eta", typeof(string));
dCollega.PrimaryKey = new DataColumn[] { dCollega.Columns["IDCollega"] };
ds.Relations.Add("rCollega_Tipo", dTipoCollega.Columns["IDTipoCollega"],
dCollega.Columns["IDCollega"]);
//
// accesso alle tabelle
//
DataTable dt01 = ds.Tables["TipoCollega"];
//
// questa riga risulta essere in errore
//
// DataTable dt02 = ds.TipoCollega;
//
// per poter ovviare al problema è necesario creare
// uno schema XSD che consenta
// l'individuazione corretta della tabella as Property
//
}
static void Sample_15()
{
//
// per questo esempio è necessario aggiungere
// al progetto un dataSet
// al fine di ricreareare tramite editor
// le tabelle le chiavi e la relazione
// progettata via codice.
// Consolidare l'esempio tramite l'immagine in allegato.
dsColleghi dC = new dsColleghi();
DataTable dtc = dC.dtTipoCollega;
DataTable dc = dC.dtCollega;
}
static void Sample_16()
{
dsColleghi dC = new dsColleghi();
DataTable dtc = dC.dtTipoCollega;
dtc.Rows.Add("1", "Interno", "Collega a dipendeza del cliente");
dtc.Rows.Add("2", "Esterno", "Collega a dipendeza di un fornitore");
dtc.Rows.Add("3", "Stretto", "Collega a dipendeza del tuo stesso fornitore");
DataTable dc = dC.dtCollega;
dc.Rows.Add("1", "1", "Arosio", "Fabio", "38");
dc.Rows.Add("2", "1", "Arosio", "Lorenzo", "38");
dc.Rows.Add("3", "2", "Arosio", "Claudio", "38");
DataRow[] Colleghi = dtc.Rows[0].GetChildRows("dtTipoCollega_dtCollega");
foreach (DataRow dr in Colleghi)
{
Console.WriteLine( string.Format("Collega: {0} Tipo {1}",
dr["Nome"], dtc.Rows[0]["TipoCollega"]));
}
DataRow Tipo = dc.Rows[1].GetParentRow("dtTipoCollega_dtCollega");
Console.WriteLine( string.Format("Tipo: {0} Collega {1}",
Tipo["TipoCollega"], dc.Rows[1]["Nome"]));
}