// Datan haku funktio public void getData(bool d) { // Luodaan uusi entiteetti ctx = new G7934Entities(); // Julistetaan lista olioista List<GridViewClassC> results; // Jos funktiota on kutsuttu arvolla 'true' if (d) { // Haetaan data entiteetistä... var result = from c in ctx.Accoplishments join p in ctx.People on c.Person equals p.idPerson // ...summaten tuloksen nimien mukaan... group c by p.Name into cc // ...ja järjestäen se summatun kestokentän mukaan orderby cc.Sum(x => x.Duration) descending select new GridViewClassC { Nimi = cc.Key, // Kerrat kenttä - yhteenlasketaan suoritusten määrä Kerrat = cc.Sum(x => 1), // Kesto - yhteenlasketaan kesto kentät. Kesto = cc.Sum(x => x.Duration) }; // Asetetaan data listaan. results = result.ToList(); } // Jos taas funktio kutsuttu arvolla 'false' else { // Haetaan taas dataa entiteestiä... var result = from c in ctx.Accoplishments join p in ctx.People on c.Person equals p.idPerson // ...summaten tulekset nimien mukaan... group c by p.Name into cc // ...ja järjestämälle ne summatun kertakentän mukaan orderby cc.Sum(x => 1) descending select new GridViewClassC { Nimi = cc.Key, Kerrat = cc.Sum(x => 1), Kesto = cc.Sum(x => x.Duration) }; // Data listaksi results = result.ToList(); } // Ja data näkyviin. gvData.DataSource = results; gvData.DataBind(); }
// Uuden lajin lisäysnapin funktio protected void btnAddNewSport_Click(object sender, EventArgs e) { // Uusi entiteetin instanssi ctx = new G7934Entities(); // Luodaan uusi lajin olio Sport s = new Sport(); // Asetetaan sille nimi tekstikentästä s.Name = txtNewSport.Text; // Lisätään se entiteettiin ctx.Sports.Add(s); // Ja tallennetaan se ctx.SaveChanges(); // Täytetään lajivalikko uudestaan FillDateAndSports(); // Ja asetataan juuri luotu laji valituksi ddlSport.SelectedValue = s.Name; // Piilotetaan lajinlisäyssälät trNewSport.Visible = false; }
// Taulun täyttö funkkari private void ddlPopulate() { // Uusi entiteetti ctx = new G7934Entities(); // Haetaan KAIKKI suoritukset... var results = from c in ctx.Accoplishments join a in ctx.People on c.Person equals a.idPerson join b in ctx.Sports on c.Sport equals b.idSport orderby c.Date descending // ...ja pökitään ne GridViewClassA olioihin select new GridViewClassA { Nimi = a.Name, Pvm = c.Date, Laji = b.Name, Kesto = c.Duration }; // Luodaan lista GridViewClassB olioista List<GridViewClassB> list = new List<GridViewClassB>(); // Plärätään entiteetistä saatu lista läpi foreach (var item in results) { // Ja lisätään kakkoslistaan olioit ykköslistasta list.Add(new GridViewClassB() { Nimi = item.Nimi, // DateTimestä leikataan tunnit, minuutit ja sekuntit pois Pvm = item.Pvm.ToString("dd.MM.yyyy"), Laji = item.Laji, Kesto = item.Kesto }); } // Leikataan listasta muut kuin 15 ensimmäistä alkiota pois. list.RemoveRange(15, list.Count - 15); // Ja pistetään data näkymään gvData.DataSource = list; gvData.DataBind(); }
// Datan täyttö päivämäärillä private void ddlPopulateWithDates() { // Jos aloituspäivä on täytetty... if (txtStart.Text != "") { // ...otetaan data sieltä startDate = DateTime.Parse(txtStart.Text); } // Jos taas ei, käytetään oletuspäivämäärää else { startDate = DateTime.Parse("01.01.2000"); } // Ja sama loppupäivälle. if (txtEnd.Text != "") { endDate = DateTime.Parse(txtEnd.Text); } else { endDate = DateTime.Parse("01.01.2100"); } // Uusi entiteetti ctx = new G7934Entities(); // Haetaan suoritukset jotka osuvat aikaväliin... var results = from c in ctx.Accoplishments join a in ctx.People on c.Person equals a.idPerson join b in ctx.Sports on c.Sport equals b.idSport // ...mikä on tässä! where c.Date > startDate & c.Date < endDate orderby c.Date descending select new GridViewClassA { Nimi = a.Name, Pvm = c.Date, Laji = b.Name, Kesto = c.Duration }; // Tehdään sama kikkailu kuin ylempänä. Eli saadaan DateTimet silmille kivempaan muotoon List<GridViewClassB> list = new List<GridViewClassB>(); foreach (var item in results) { list.Add(new GridViewClassB() { Nimi = item.Nimi, Pvm = item.Pvm.ToString("dd.MM.yyyy"), Laji = item.Laji, Kesto = item.Kesto }); } // Datasourcen määritys ja datan bindaus. gvData.DataSource = list; gvData.DataBind(); }
// Sivun lataus funktio. protected void Page_Load(object sender, EventArgs e) { // Jos sivulle ollaan tultu katselemaan jonkun (muun) henkilön suorituksia... if (Request.QueryString["name"] != null) { // Otetaan nimi talteen osoiteriviltä string nameForWhere = Request.QueryString["name"]; // Entiteetin uusi instanssi ctx = new G7934Entities(); // Haetaan data entiteesitä GridViewClassC olioihin... var results = from c in ctx.Accoplishments join a in ctx.People on c.Person equals a.idPerson join b in ctx.Sports on c.Sport equals b.idSport // ...joiden suorittaja on kyseinen henkilö. where a.Name == nameForWhere orderby c.Date descending select new GridViewClassC { Nimi = a.Name, Pvm = c.Date, Laji = b.Name, Kesto = c.Duration, Id = c.idAccoplishmnet }; // Tehdään GridViewClassC luokan oliojoukosta lista joukon // GridViewClassD olioita jotta päivämäärä saadaan kivaan muotoon List<GridViewClassD> list = new List<GridViewClassD>(); foreach (var item in results) { list.Add(new GridViewClassD() { Nimi = item.Nimi, Pvm = item.Pvm.ToString("dd.MM.yyyy"), Laji = item.Laji, Kesto = item.Kesto, Id = item.Id }); } // Datan bindaus gvData.DataSource = list; gvData.DataBind(); // Piilotetaan ensimmäinen linkkikolumni gvData.Columns[0].Visible = false; // Kerrotaan käyttäjälle kenen tuloksia näytetään. lblUser.Text = "Näytetään henkilön " + nameForWhere + " tulokset"; } // Jos taas sivulle on tultu yläpalkin linkin kautta ja käyttäjä on jo valittu else if (Request.Cookies["UserSettings"] != null) { // Otetaan keksistä käyttäjän nimi talteen string nameForWhere = Request.Cookies["UserSettings"]["Name"]; // Luodaan uusi instanssi entiteetistä ctx = new G7934Entities(); // Ja haetaan käyttäjän suoritukset entiteetistä. var results = from c in ctx.Accoplishments join a in ctx.People on c.Person equals a.idPerson join b in ctx.Sports on c.Sport equals b.idSport where a.Name == nameForWhere orderby c.Date descending select new GridViewClassC { Nimi = a.Name, Pvm = c.Date, Laji = b.Name, Kesto = c.Duration, Id = c.idAccoplishmnet }; // Muutetaan taas oliot luokasta C luokkaan D jotta päivämäärät on kivoja. List<GridViewClassD> list = new List<GridViewClassD>(); foreach (var item in results) { list.Add(new GridViewClassD() { Nimi = item.Nimi, Pvm = item.Pvm.ToString("dd.MM.yyyy"), Laji = item.Laji, Kesto = item.Kesto, Id = item.Id }); } // Asetetaan taas data näkyviin gvData.DataSource = list; gvData.DataBind(); // Ja tällä kertaa piilotetaan kolumni 1 jossa näkyy nimet ilman linkkejä gvData.Columns[1].Visible = false; // Kerrotaan vielä käyttäjälle kuka hän on lblUser.Text = "Valittuna: " + nameForWhere; btnLogOut.Visible = true; } // Jos taas käyttäjää ei ole valittu lainkaan else { // Pyydetään käyttäjää valitsemaan itsentä alasvetovalikosta... lblUser.Text = "Valitse kuka olet"; // ...joka asetetaan näkyviin. ddlUser.Visible = true; // Ja mikäli dataa valikkoon ei vielä ole haettu if(!IsPostBack) { // Luodaan uusi entiteetti ctx = new G7934Entities(); // Haetaan sieltä ihmiset var results = from c in ctx.People select c.Name; // Luodaan lista... List<string> list = new List<string>(); // ...johon lisätään ensimmäiseksi tyhjä valinta... list.Add(""); // ...ja sitten nimet entiteetin joukosta. foreach (var i in results) { list.Add(i); } // Ja sitten data näkyviin. ddlUser.DataSource = list; ddlUser.DataBind(); } } }
// Lisäysnäppäimen painallus protected void btnAdd_Click(object sender, EventArgs e) { // Luodaan uusi entiteetin instanssi ctx = new G7934Entities(); // Jos kyseessä suorituksen muokkaus... if (Request.QueryString["id"] != null) { // Haetaan suoritus _id:n perusteella int id = int.Parse(Request.QueryString["id"]); var result = from c in ctx.Accoplishments // Tässä merkataan id where c.idAccoplishmnet == id select c; // Haetaan lajin _id minkä nimi on tekstikentässä var s = from c in ctx.Sports where c.Name == ddlSport.SelectedValue select c; // Luodaan apumuuttuja lajin _id:lle... int sportId = 0; foreach (var i in s) { // ...ja merkataan siihen arvo sportId = i.idSport; } foreach (var a in result) { // Merkataan suoritukseen uudet arvot a.Date = DateTime.Parse(ddlDate.SelectedValue); a.Duration = int.Parse(txtDuration.Text); a.Sport = sportId; } // Ja tallennetaan se.. ctx.SaveChanges(); // ...ja näytetään käyttäjälle ilmoitus lblMessage.Text = "Muutos tallennettu"; lblMessage.Visible = true; } // Jos taas kyseessä on uusi suoritus else { // Luodaan apumuuttuja... string name = ""; // ...ja jos uusien nimien lisäys on mahdollista... if (AllowNewUsersAndSports) { // ...haetaan nimi tekstikentästä... name = txtName.Text; } // ...jos taas lisäys ei ole käytössä else { // ...haetaan nimi alasvetovalikosta. name = ddlName.SelectedValue; } // Haetaan tallennettavan henkilön _id kenttä entiteetistä... var person = from c in ctx.People where c.Name == name select c.idPerson; int personId = 0; foreach (var i in person) { // ...ja merkataan se apumuuttujaan. personId = i; } // Haetaan henkilön suoritukset... var results = from c in ctx.Accoplishments where c.Person == personId select c; int counter = 0; foreach (var i in results) { // ...ja jos henkilöllä on jo suorituksia valitulle päivälle niin lasketaan ne. if (i.Date.ToString("dd.MM.yyyy").Equals(ddlDate.SelectedValue)) { counter++; } } // Jos suorituksiä päivälle on 5... if (counter > 4) { // ...ilmoitetaan siitä käyttäjälle... lblMessage.Text = "Sinulla on tällä päivällä jo " + counter + " suoritusta, et voi lisätä enempää."; lblMessage.Visible = true; // ...ja piilotetaan lisäysnapit. btnAdd.Visible = false; btnConfirmedAdd.Visible = false; } // Jos taas suorituksia on mutta ei vielä viittä... else if (counter > 0) { // ...piilotetaan peruslisäysnappi ja näytetään sekondäärilisäysnappi... btnAdd.Visible = false; btnConfirmedAdd.Visible = true; // ...ja ilmoitetaan tästä käyttäjälle. lblMessage.Text = "Sinulla on tällä päivällä jo " + counter.ToString() + " suoritusta, lisätäänkö uusi?"; lblMessage.Visible = true; } // Jos suorituksia ei vielä kyseiselle päivälle ole, lisätään suoritus else { AddNew(); } } }
// Täytetään laji ja päivämäärä valikot protected void FillDateAndSports() { // Uusi entiteetti instanssi ctx = new G7934Entities(); // Haetaan lajit entiteetistä... var sports = from c in ctx.Sports select c.Name; // Luodaan haetuista lajeista lista string alkioita List<string> sportList = sports.ToList(); // Ja jos lajien lisäys on käytössä... if (AllowNewUsersAndSports) { // ...lisätään listan loppuun uusi laji vaihtoehto sportList.Add(addNewSport); } // Asetetaan lajilista lajivalikon datasourceksi... ddlSport.DataSource = sportList; // ...ja kiinnitetään data valikkoon. ddlSport.DataBind(); // Luodaan lista päivämäärille List<String> dates = new List<string>(); // Apumuuttujat jotai käytetään jos kyseessä suorituksen muokkaus string selectedDate = ""; string selectedSport = ""; string selectedName = ""; string selectedDuration = ""; // Jos kyseessä suorituksen muokkaus if (Request.QueryString["id"] != null) { // Haetaan suoritus int id = int.Parse(Request.QueryString["id"]); var result = from c in ctx.Accoplishments join a in ctx.People on c.Person equals a.idPerson join b in ctx.Sports on c.Sport equals b.idSport // Suorituksen id pitää olla tietty _id where c.idAccoplishmnet == id // Tulokset läiskäytetään uuteen olioon select new { // Halutut arvot halutuille nimille name = a.Name, date = c.Date, sport = b.Name, duration = c.Duration }; foreach (var i in result) { // Jos suorituksen päivämäärä ei muuten tulisi valikkoon... if (i.date.CompareTo(DateTime.Today.AddDays(-14)) < 0) { // ...lisätään suorituksen päivämäärä päivämäärälistaan dates.Add(i.date.ToString("dd.MM.yyyy")); } // Merkataan valittavat arvot selectedDate = i.date.ToString("dd.MM.yyyy"); selectedSport = i.sport; selectedName = i.name; selectedDuration = i.duration.ToString(); } } // Lisätään tämä päivämäärä listaan... DateTime date = DateTime.Today; dates.Add(date.ToString("dd.MM.yyyy")); for (int i = 0; i < 13; i++) { // ...ja sen jälkeen 13 päivää taaksepäin date = date.AddDays(-1); dates.Add(date.ToString("dd.MM.yyyy")); } // Lisätään 14 (ehkä 15 jos vanhan suorituksen muokkaus) päivämäärävalikon datasourceksi ddlDate.DataSource = dates; // Ja bindataan data. ddlDate.DataBind(); // Jos käyttäjien lisäys ei ole sallittu if (!AllowNewUsersAndSports) { // Haetaan entiteetistä valmiit käyttäjät... var people = from c in ctx.People select c.Name; // ...ja muutetaan ne listaksi ja laitetaan valikon datasourceksi ddlName.DataSource = people.ToList(); // Ja bindataan data. ddlName.DataBind(); } // Jos kyseessä suorituksen muokkaus jolloin selected arvot on muutettu... if (selectedDate != "" && selectedSport != "" && selectedName != "" && selectedDuration != "") { // ...asetetaan saadut arvot kenttiin. txtName.Text = selectedName; txtDuration.Text = selectedDuration; ddlSport.SelectedValue = selectedSport; ddlDate.SelectedValue = selectedDate; } }
// Sekondäärilisäysnappi protected void btnConfirmedAdd_Click(object sender, EventArgs e) { // Kun ollaan varmistettu suorituksen lisäys, lisätään se. ctx = new G7934Entities(); AddNew(); }