using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class _Default : System.Web.UI.Page
{
   protected void Page_Load(object sender, EventArgs e)
   {
      if (!IsPostBack)
      {
         // Wywoanie metody, ktra tworzy tabele i zwizki.
         DataSet ds = CreateDataSet();

         // Ustawienie pierwszej tabeli jako rda danych dla siatki.
         Bugs.DataSource = ds.Tables["Bugs"];
         Bugs.DataBind();

         BugConstraints.DataSource = ds.Tables["Bugs"].Constraints;
         BugConstraints.DataBind();
      }
   }

   // Rczne tworzenie.
   private DataSet CreateDataSet()
   {
      // Ustanowienie egzemplarza nowego obiektu DataSet,
      // ktry wypenimy tabelami i zwizkami.
      DataSet dataSet = new DataSet();

      // Utworzenie tabeli Bugs i jej kolumn
      // imitujcych atrybuty z bazy danych SQL.
      DataTable tblBugs = new DataTable("Bugs");

      DataColumn newColumn; // Przechowanie nowych kolumn po ich utworzeniu.

      newColumn =
         tblBugs.Columns.Add(
            "BugID", Type.GetType("System.Int32"));
      newColumn.AutoIncrement = true;     // Autoinkrementacja.
      newColumn.AutoIncrementSeed = 1;      // Rozpoczynamy od 1.
      newColumn.AutoIncrementStep = 1;      // Zwikszamy o 1.
      newColumn.AllowDBNull = false;        // Warto zerowa nie jest dozwolona.

      // lub moemy samodzielnie poda nazw ograniczenia.
      UniqueConstraint constraint =
         new UniqueConstraint("Unique_BugID", newColumn);
      tblBugs.Constraints.Add(constraint);

      // Tworzenie tablicy kolumn dla klucza podstawowego.
      DataColumn[] columnArray = new DataColumn[1];
      columnArray[0] = newColumn;

      // Dodanie tablicy do waciwoci klucza podstawowego.
      tblBugs.PrimaryKey=columnArray;

      // Kolumna Product.
      newColumn = tblBugs.Columns.Add(
         "Product", Type.GetType("System.Int32"));
      newColumn.AllowDBNull = false;
      newColumn.DefaultValue = 1;

      // Zapisujemy na potrzeby tworzenia klucza zewntrznego.
      DataColumn bugProductColumn = newColumn;

      // Kolumna Version.
      newColumn = tblBugs.Columns.Add(
         "Version", Type.GetType("System.String"));
      newColumn.AllowDBNull = false;
      newColumn.MaxLength = 50;
      newColumn.DefaultValue = "0.1";

      // Kolumna Description.
      newColumn = tblBugs.Columns.Add(
         "Description", Type.GetType("System.String"));
      newColumn.AllowDBNull = false;
      newColumn.MaxLength = 8000;
      newColumn.DefaultValue = "";

      // Kolumna Reporter.
      newColumn = tblBugs.Columns.Add(
         "Reporter", Type.GetType("System.Int32"));
      newColumn.AllowDBNull = false;

      // Zapisujemy na potrzeby tworzenia klucza zewntrznego.
      DataColumn bugReporterColumn = newColumn;

      // Dodajemy rekordy na podstawie utworzonego schematu bazy danych.
      DataRow newRow;      // Przechowujemy nowy rekord.

      newRow = tblBugs.NewRow();
      newRow["Product"] = 1;
      newRow["Version"] = "0.1";
      newRow["Description"] = "Ulega awarii przy starcie";
      newRow["Reporter"] = 5;
      tblBugs.Rows.Add(newRow);

      newRow = tblBugs.NewRow();
      newRow["Product"] = 1;
      newRow["Version"] = "0.1";
      newRow["Description"] =
         "Nie zosta zgoszony prawidowy waciciel bdu";
      newRow["Reporter"] = 5;
      tblBugs.Rows.Add(newRow);

      newRow = tblBugs.NewRow();
      newRow["Product"] = 1;
      newRow["Version"] = "0.1";
      newRow["Description"] =
         "Nie zostaa pokazana historia poprzednich dziaa";
      newRow["Reporter"] = 6;
      tblBugs.Rows.Add(newRow);

      newRow = tblBugs.NewRow();
      newRow["Product"] = 1;
      newRow["Version"] = "0.1";
      newRow["Description"] =
         "Ponowne odczytanie nie powiodo si";
      newRow["Reporter"] = 5;
      tblBugs.Rows.Add(newRow);

      newRow = tblBugs.NewRow();
      newRow["Product"] = 2;
      newRow["Version"] = "0.1";
      newRow["Description"] = "Naga utrata danych";
      newRow["Reporter"] = 5;
      tblBugs.Rows.Add(newRow);

      newRow = tblBugs.NewRow();
      newRow["Product"] = 2;
      newRow["Version"] = "0.1";
      newRow["Description"] = "Kod HTML nie zosta prawidowo pokazany";
      newRow["Reporter"] = 6;
      tblBugs.Rows.Add(newRow);

      // Dodajemy tabel do zbioru danych.
      dataSet.Tables.Add(tblBugs);


      // Tabela Product.
      // Tworzymy tabel Products i dodajemy do niej kolumny.
      DataTable tblProduct = new DataTable("lkProduct");
      newColumn = tblProduct.Columns.Add(
         "ProductID", Type.GetType("System.Int32"));
      newColumn.AutoIncrement = true;     // Autoinkrementacja.
      newColumn.AutoIncrementSeed = 1;      // Rozpoczynamy od 1.
      newColumn.AutoIncrementStep = 1;      // Zwikszamy o 1.
      newColumn.AllowDBNull = false;        // Warto zerowa nie jest dozwolone.
      newColumn.Unique = true;              // Kada warto musi by unikalna.

      newColumn = tblProduct.Columns.Add(
         "ProductDescription", Type.GetType("System.String"));
      newColumn.AllowDBNull = false;
      newColumn.MaxLength = 8000;
      newColumn.DefaultValue = "";

      newRow = tblProduct.NewRow();
      newRow["ProductDescription"] = "BugX - ledzenie bdw";
      tblProduct.Rows.Add(newRow);

      newRow = tblProduct.NewRow();
      newRow["ProductDescription"] =
         "OMI - Mj Osobisty Meneder Informacji.";
      tblProduct.Rows.Add(newRow);

      // Do zbioru danych dodajemy tabel Products.
      dataSet.Tables.Add(tblProduct);


      // Tabela People.
      // Tworzymy tabel People i dodajemy do niej kolumny.
      DataTable tblPeople = new DataTable("People");
      newColumn = tblPeople.Columns.Add(
         "PersonID", Type.GetType("System.Int32"));
      newColumn.AutoIncrement = true;     // Autoinkrementacja.
      newColumn.AutoIncrementSeed = 1;      // Rozpoczynamy od 1.
      newColumn.AutoIncrementStep = 1;      // Zwikszamy o 1.
      newColumn.AllowDBNull = false;        // Warto zerowa nie jest dozwolone.

      UniqueConstraint uniqueConstraint =
         new UniqueConstraint(
            "Unique_PersonID", newColumn);
      tblPeople.Constraints.Add(uniqueConstraint);

      // Kolumn PersonID odkadamy na pniej,
      // na potrzeby ogranicze klucza zewntrznego.
      DataColumn PersonIDColumn = newColumn;

      columnArray = new DataColumn[1];
      columnArray[0] = newColumn;
      tblPeople.PrimaryKey = columnArray;


      newColumn = tblPeople.Columns.Add(
         "FullName", Type.GetType("System.String"));
      newColumn.AllowDBNull = false;
      newColumn.MaxLength = 8000;
      newColumn.DefaultValue = "";

      newColumn = tblPeople.Columns.Add(
         "eMail", Type.GetType("System.String"));
      newColumn.AllowDBNull = false;
      newColumn.MaxLength = 100;
      newColumn.DefaultValue = "";

      newColumn = tblPeople.Columns.Add(
         "Phone", Type.GetType("System.String"));
      newColumn.AllowDBNull = false;
      newColumn.MaxLength = 20;
      newColumn.DefaultValue = "";

      newColumn = tblPeople.Columns.Add(
         "Role", Type.GetType("System.Int32"));
      newColumn.DefaultValue = 0;
      newColumn.AllowDBNull = false;

      newRow = tblPeople.NewRow();
      newRow["FullName"] = "Jesse Liberty";
      newRow["email"] = "jliberty@libertyassociates.com";
      newRow["Phone"] = "617-555-7301";
      newRow["Role"] = 1;
      tblPeople.Rows.Add(newRow);

      newRow = tblPeople.NewRow();
      newRow["FullName"] = "Dan Hurwitz";
      newRow["email"] = "dhurwitz@stersol.com";
      newRow["Phone"] = "781-555-3375";
      newRow["Role"] = 1;
      tblPeople.Rows.Add(newRow);

      newRow = tblPeople.NewRow();
      newRow["FullName"] = "John Galt";
      newRow["email"] = "jGalt@franconia.com";
      newRow["Phone"] = "617-555-9876";
      newRow["Role"] = 1;
      tblPeople.Rows.Add(newRow);

      newRow = tblPeople.NewRow();
      newRow["FullName"] = "John Osborn";
      newRow["email"] = "jOsborn@oreilly.com";
      newRow["Phone"] = "617-555-3232";
      newRow["Role"] = 3;
      tblPeople.Rows.Add(newRow);

      newRow = tblPeople.NewRow();
      newRow["FullName"] = "Ron Petrusha";
      newRow["email"] = "ron@oreilly.com";
      newRow["Phone"] = "707-555-0515";
      newRow["Role"] = 2;
      tblPeople.Rows.Add(newRow);

      newRow = tblPeople.NewRow();
      newRow["FullName"] = "Tatiana Diaz";
      newRow["email"] = "tatiana@oreilly.com";
      newRow["Phone"] = "617-555-1234";
      newRow["Role"] = 2;
      tblPeople.Rows.Add(newRow);

      // Dodajemy tabel People do zbioru danych.
      dataSet.Tables.Add(tblPeople);

      // Tworzymy ograniczenie klucza zewntrznego,
      // przekazujemy kolumnie nadrzdnej w stosunku do People
      // i kolumnie potomnej w stosunku do Bugs.
      ForeignKeyConstraint fk =
         new ForeignKeyConstraint(
            "FK_BugToPeople", PersonIDColumn, bugReporterColumn);
      fk.DeleteRule = Rule.Cascade;   // Podobnie jak ojciec i syn.
      fk.UpdateRule = Rule.Cascade;
      tblBugs.Constraints.Add(fk);  // Dodajemy nowe ograniczenie.


      // Deklarujemy obiekty DataRelation i DataColumn.
      System.Data.DataRelation dataRelation;
      System.Data.DataColumn dataColumn1;
      System.Data.DataColumn dataColumn2;

      // Ustawiamy obiekt dataColumns w celu utworzenia zwizku
      // midzy tabelami Bug and BugHistory na podstawie klucza BugID.
      dataColumn1 =
         dataSet.Tables["People"].Columns["PersonID"];
      dataColumn2 =
         dataSet.Tables["Bugs"].Columns["Reporter"];

      dataRelation =
         new System.Data.DataRelation(
         "BugsToReporter",
         dataColumn1,
         dataColumn2);

      // Dodajemy nowy obiekt DataRelation do zbioru danych.
      dataSet.Relations.Add(dataRelation);

      return dataSet;
   }
}
