Just nu i M3-nätverket
Gå till innehåll

Gridview med joinade tabeller


~Helén~

Rekommendera Poster

Någon som vet hur man hämtar joinad fråga, eller med subfrågor, från fler tabeller till en gridview? Jag har googlat en väldig massa på detta men hittar ingen vettig information hur det egentligen går till. Inte mer än att jag hittar info om att det ska gå att hämta fler tabeller och lägga i Dataset. Är det meningen att man ska lägga allt ifrån fler tabeller i Dataset för att sedan söka ut den info man vill ha ifrån detta? Hur går isåfall detta till?

Länk till kommentar
Dela på andra webbplatser

Det finns flera sätt, ett äldre sätt hade varit att först använda DataRelation-objekt som relaterar tabellerna. Jag föredrar ett angreppssätt med Linq. Skapa en fråga i Linq som joinar de tabeller du vill ha. Använd sedan CopyToDataTable på resultatet för att skapa en ny tabell med de joinade raderna. Använd denna tabell som datasource.

Länk till kommentar
Dela på andra webbplatser

Tack för svar. Tyvärr har jag inte läst Linq. Vet inte hur pass lång tid det tar att sätta sig in i. Om jag ska gå vidare med det tillvägagångssättet, fungerar det då mot en Access-databas?

Länk till kommentar
Dela på andra webbplatser

Linq kan ställa frågor mot alla typer av relationsdatabaser, listor, arrayer, xml osv.så inga problem med en Access-databas.

 

Det är definitivt värt det arbete du lägger ned på att läsa in dig på alla suveräna "nyheter" (rätt gamla vid det här laget ;) i Net 3.5-4.0 och C#3.0 - 4.0, inte minst då LINQ, anonyma typer, Lambda-uttryck (och andra implementationer av det funktionella programmeringsparadigmet) och alla nya typer av listor och listmetoder.

Länk till kommentar
Dela på andra webbplatser

Okey då får jag väl göra det. Det var rätt länge sedan jag läste ASP.NET, eller c#, så därmed ingick inte Linq i de studierna. Så för mig är det nytt, även fast det generellt kanske är gammalt. :)

 

Märkligt för övrigt att det ska vara så mycket mer jobb, eller hur jag ska uttrycka mig, bara för en simpel joinad sats. Jag tycker att det borde vara lika enkelt som när man hämtar data bara från en tabell. :unsure:

Länk till kommentar
Dela på andra webbplatser

Alltså, det finns ju många sätt att göra det på.

Om du vill hålla dig till ett mer traditionellt sätt, så kan du ju helt enkelt bara ställa en Join-fråga direkt till databasen, lagra resultatet i en DataTable och sen använda denna i en DataSet som datakälla. Det är ju inget som tvingar dig att ställa frågor mot endast en tabell i databasanropet.

 

Ett annat sätt är att använda dig av flera DataTables som motsvarar tabeller i databasen och sedan koppla ihop dessa med DataRelation-objekt, som jag redan nämnt. Sedan kan du hämta child-poster baserat på dessa relationer.

 

Det är dessutom inget som hindrar dig från att använda något annat än DataSet/DataTable som datakälla, du kan ex. använda listor av olika typer, eller egna klasser baserade på listtyper, som du själv fyller med data från databasen.

Länk till kommentar
Dela på andra webbplatser

Det är precis det jag skulle vilja göra, att få ställa en fråga med subquery (alt joinad fråga) mot databasen och lägga i ett dataset som jag har som datasource mot gridview. Men det funkar bara inte. Har testat oändligt många gånger. Och när jag googlat på det verkar det som att det inte går att göra så.

 

Det andra alternativet har jag också provat, att lägga två tabeller i dataset, skapa en relation mellan dessa som läggs i datasetet. Men det är bara ena tabellen som visas i gridviewen. Vet inte om jag gör rätt. Ena tabellen ska bara visa info mellan vissa datum, och andra tabellen ska visa all info som har samma KID som kommer fram från första tabellen. När jag lade in tabellerna i datasetet sökte jag ut datumen i ena tabellen innan jag lade in den i datasetet, medan jag tog med all info i den andra tabellen och hoppades att relationen skulle styra att bara de med rätt KID visas. Men somsagt....det funkade inte. Kanske ska man lägga in allt i bägge tabellerna från början och göra någon slags utsökning mot datasetet. Har bara inte lyckats hitta någonstans hur man gör utsökningar mot datasetet. Lite smått frustrerande detta.

Länk till kommentar
Dela på andra webbplatser

Personligen avskyr jag de inbyggda kontrollerna i ASP.Net, jag använder de aldrig om jag inte måste bygga vidare på andras kod. Jag föredrar att helt separera serverside-koden från presentationsgränssnittet. Så här hade jag gjort det isåfall

 

1. På serversidan, i ex. en webbhandler, hämta informationen från databasen och returnera denna som ex. XML, JSON eller bara i något eget format.

2. På klientsidan, vid sidladdning, anropar du din webbhandler via Ajax (förslagsvis med hjälp av jQuery). Sedan bygger du upp dina tabeller dynamiskt med jQuery, skapar dina egna händelsehanterare för cell-klick osv. Hantera all uppdatering av syster- eller dotter-tabeller på samma sätt.

 

Detta angreppssätt bygger på mönstret MVC, eller model-view-controller och syftar till att separera de olika logiska enheterna i applikationen. Klassisk ASP.Net är ett gytter av hopbakning av presentation, tillstånd/viewstates och bakomliggande affärslogik och datalager. Hemskt egentligen att det fortfarande får fortsätta leva ;)

Länk till kommentar
Dela på andra webbplatser

YES!! Det ordnade sig. Jag börjar inse att jag nog måste undersöka mina ögon. Det är ju helt sanslöst att jag har kunnat krångla med denna uppgift under flera skilda dagar och inte kommit någonstans förren nu, och detta för att jag bara inte sett att jag skrivit fel. Dock har jag ju provat ett flertal sql-satser, men likförbannat tydligen lyckas kila in något fel på alla.

 

Jaja. Nu är det iallafall löst. Det är ju så man får skämmas. :blush:

 

Men för att svara på ditt inlägg. Vet inte om jag fattar dig rätt men jag delar också upp koden. Låter all databashantering ligga i en dbHandler klass, och returnerar sedan Datasetet (eller vilken form jag nu lagrat datat i) till klassen.aspx.cs där jag sammanfogar den med gridviewen, datalist, repeater etc. Vet inte om det var det du menade. Jag har hittills däremot inte använt JQuery eller AJAX, då jag inte lärt mig dessa. Ska däremot satsa på att lära mig AJAX snart har jag tänkt. Det verkar bra att kunna.

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...