Altáblák, lista sorba rakása

Altáblák, lista sorba rakása
2016-04-26T23:30:00+02:00
2016-04-28T12:51:33+02:00
2022-10-15T22:01:20+02:00
iolah2
Sziasztok

Van két táblám. Az első legyen például osztály, jelemzőivel, a második diákok.
Azt szeretném elérni, hogy C# winform-ban egy sorban jelenítsem meg osztályonként a jelemzőket.
Példa: 
datagridview:
osztályfönök - osztály neve - tanulo 1 - tanulo 2- tanulo 3-.....-tanulo utolso
Ahol az osztályfönök, osztály neve az első táblában, a tanulo 1, stb, a második tábla eltérő soraiban vannak.
Ezt hogy érdemes, lehet könnyen megvalósítani?



Gondolkoztam Listák összefüzésén de nem jött össze.
Célom: Osztály U 1.tanulo U 2.tanulo..... és mindezt egy sorba tenni.
Persze úgy, hogy hasonlóan viselkedjen a többi sorban is
Köszönök minden segítséget
Mutasd a teljes hozzászólást!
Innen el tudsz indulni.
Mutasd a teljes hozzászólást!

  • Szia!

    Ha a tábláidat odaadod a DataGridView DataSource property-jének, akkor ő valahogy automatikusan fel tudja azt dolgozni. Még egy BindingSource-on is átfuttathatod és akkor tudod szűrni is meg hasonló.

    Nálam nem táblákban hanem objektumokban voltak az adataim (típusos lista például). A lista egy elemét a DataGridView egy sorának dolgozta fel. Az objektumban található elemeket pedig típusaik alapján dolgozta fel. A logikai (bool) property checkbox-ként jelent meg, a string sima szövegként, egy belső felsorolás meg egy comboboxnak. Szerintem itt az oldalon is rengeteg példát fogsz rá találni. Véleményem szerint ez a legegyszerűbb módja egy adathalmaz megjelenítésének DataGridView-ban. Régebben próbáltam azt, hogy cellánként és úgy soronként töltöm ki, de attól ez kevesebb kóddal jár és sokkal egyszerűbb is.

    A két táblád pedig nyilván össze van kapcsolva egymással valami osztályazonosító vagy valami által. Itt mást nem tudok elképzelni, mint egy egy-több kapcsolatot (egy osztálynak csak egy osztályfőnöke lehet és egy diáknak csak egy osztályba járhat egyszerre). Egy SQL utasítással lekérdezed az osztályfőnök nevét és az ő osztályába tartozó diákokat a másik táblából.
    Mutasd a teljes hozzászólást!
  • Kicsit hiányos az info:
    - milyen controlban szeretnéd ezt megjeleníteni?
    - tanulo1 ... tanuloN egymás alatt (külön-külön egy-egy oszlopban) kell legyenek vagy jó az összes tanuló egy stringben, mondjuk vesszővel elválasztva?
    - szeretnéd-e a tanulókat szerkeszteni ebben a listában?
    - milyen adatbázist használsz?
    - milyen adatelérési réteget használsz (pl. ADO.NET DataSet / Entity Framework / egyéb / semmi)


    Nem triviális amit szeretnél, mert a relációs adatmodellnél nem szokás így ábrázolni az adatokat, hisz az osztályoknak különböző létszáma van, így a táblázat vége hiányos lesz. Nehéz új elemet hozzáadni és szerkeszteni.
    Mindenképpen valamilyen trükkre van szükség, amihez viszont nem árt tudni a válaszokat a fenti kérdésekre.
    Mutasd a teljes hozzászólást!
  • Kicsit hiányos az info:

    - milyen controlban szeretnéd ezt megjeleníteni?

    Jelenleg winform datagridview-ban gondolkodok.

    - tanulo1 ... tanuloN egymás alatt (külön-külön egy-egy oszlopban) kell legyenek vagy jó az összes tanuló egy stringben, mondjuk vesszővel elválasztva?

    A felsorolást futtában rosszul fogalmaztam meg. Tekintsük inkább úgy, hogy vannak csoportok, egy tanuló több csoportban is lehet, de inkább küldök egy kis példát. Úgy gondoltam, először összeszámolnám, hogy az aktuális tantárgy(osztály helyett ezt használom inkább
    ) listához összesen hány különböző diák tartozik, velük mondjuk névsorrendben feltöltöm az oszlopokat.
    Így összeraknám a datagridview fejlécét, bár nem tudom mennyire bonyolult hiszen a diák nevét több oszlop fölé akarom helyezni(Lásd minta)
    Persze a nappali csak azt szimbolizálja, hogy egy diák neve alá több oszlopot akarok becsatolni

    - szeretnéd-e a tanulókat szerkeszteni ebben a listában?

    Szerkeszthetőséget szeretném engedélyezni.

    - milyen adatbázist használsz?- milyen adatelérési réteget használsz (pl. ADO.NET DataSet / Entity Framework / egyéb / semmi)

    microsoft sql 2012 és Entity Framework, vagy amilyen réteget tanácsolsz.

    Az is jó, ha azt mondod datagridview helyett másként kellene megoldani.

    Bocsi az első megfogalmazásért(későn írtam, este).
    Köszi 
    Üdv

    Igazából sql adatbázist még nem írtam meg, ezt írtam entity framework codefirst-be és példányosítottam

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data.Entity; using System.Linq; public class AjanlatContext : DbContext { public DbSet<Tantargy> Tantargy { get; set; } public DbSet<Diak> Diak { get; set; } } public class Tantargy { public Tantargy(int tantargyId, string tanar, BindingList<Diak> diakok) { TantargyId = tantargyId; Tanar = tanar; Diakok = diakok; } public int TantargyId { get; set; } public string Tanar { get; set; } public virtual BindingList<Diak> Diakok { get; set; } }
    Mutasd a teljes hozzászólást!
    Csatolt állomány
  • Én így a példa alapján két datagridview-t vizualizálok magam elé. Lenne egy kisebb tábla. Abban felsorolnád a tantárgyak azonosítóit, meg az azokat tanító tanárok neveit meg persze magát a tantárgy nevét.

    Ha az egyiket kijelölöd, akkor a második altáblában (szintén egy GridView) benne lennének a tanulók. Ennek a táblának a fejléce: Név, Nappalis, Átlag.

    És akkor alatta egy rekord: Aladár, Igen (checkbox), 3,5. Ez így szerkeszthető is maradna. A legalsó sorban lenne mindig egy üres kitöltetlen rekord, ahogy a DataGridView default szokta engedni az új elem hozzáadását. Módosításnál egyszerűen csak átírnád egy cella értékét. Törlésnél meg mondjuk beraksz egy plusz oszlopot vagy jobb egérgomb a soron vagy valami tetszőleges módszer.

    tanulo1 ... tanuloN egymás alatt (külön-külön egy-egy oszlopban) kell legyenek vagy jó az összes tanuló egy stringben, mondjuk vesszővel elválasztva?

    Hát ez az egy cellában történő felsorolás, vesszővel elválasztva valahogy ellentmond a Normál Forma egyik szabályának mi szerint egy mezőben csak egyedi adatok lehetnek, de ha nincs jelentősége vagy máshogy nem oldható meg, akkor akár így is beválhat.


    Én egyébként ilyen adatbázisos eléréshez régóta az Linq to SQL-t használom. Eddig igazából gondom nem volt vele, elég gyors és megcsinálja, amit kell. Entity Framework-kel működik, így a rekordjaimat objektumokként tudom kezelni és a Linq lambda kifejezéseit ráuszítva kedvemre tudom őket kezelni. Adatbázis kezelésben kissé hiányosak az ismereteim, de ez eddig számomra még mindig járható útnak bizonyult.
    Mutasd a teljes hozzászólást!
  • Szia, az a feladat, hogy egy sorba tegyem, általában max 8-9 diák kerül be. Tehát egy datagridben gondolom megvalósítani. Lehet átgondolom inkább.
    üdv
    Mutasd a teljes hozzászólást!
  • általában max 8-9 diák kerül be.

    Általában

    Mi van ha egyszer összejön 10 diák máskor meg csak beesik 1? Szerintem ezek kezelése is bonyolultabb, mert akkor minden lekérés esetében ellenőrizned kell az értéket, nem-e véletlenül null (üres cella). Ennek megfelelően a táblát is úgy kell kialakítanod, hogy ezen cellák lehetnek NULL-ok ( Is Null). Ez a jobbik eset. De mi van ha egy nagyon népszerű tantárgynál még több diák jelentkezik, ahogy stl már utalt rá? Át kell szabni az egész struktúrát; megnövelve az oszlopok számát. Ez nekem eddig csak úgy sikerült ha kimentettem az adatokat, átszabtam a struktúrát (elvesztve minden adatot) és utána visszatöltöttem az adatokat. Persze az adatbázis guruk erre biztos találtak már egy jobb megoldást is, de nekem eddig csak így sikerült. A másik dolog, hogy az adatok hogy kívánod elhelyezni. Az első cellában vesszővel elválasztva felsorolod a diákok neveit, majd utána a sorrendben megfelelően berakod a logikai (nappalis) és a tört (átlag) oszlopokat. Így a diákok száma * 2 + 1 db oszlopod kell hogy legyen, amiből az első összetevő nyilván dinamikusan változhat. Nekem ez így rettentő bonyolultan hangzik.
    Mutasd a teljes hozzászólást!
  • Szia jelenleg találtam pivot táblás megvalósítást 

    Pivot C# Array or DataTable: Convert a Column To a Row with LINQ - TechBrij

    Ezzel csak az a gondom, Hogy én a tanulót úgy szeretném megjeleníteni: két oszlop felett a tanuló neve(mindkettő fellett), továbbá ezen két oszlop felett egyenként  a jelemzők megnevezése is
    Mutasd a teljes hozzászólást!
  • Innen el tudsz indulni.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd