Avatar billede davidfossil Nybegynder
14. december 2005 - 14:02 Der er 22 kommentarer og
2 løsninger

GridView og custom paging

Sidder med et projekt hvor jeg skal bruge et GridView med custom paging. Dette kunne løses temmelig snildt med det gamle DataGrid, men jeg kan ikke helt lure hvordan samme handling udføres med det nye GridView.

Efter hvad jeg har kunne finde på Google, ser det ud til at jeg er nødt til at bruge en ObjectDataSource:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnaspp/html/GridViewEx05.asp

Jeg vil dog helst bare databinde helt normalt fra min code-behind (beside?). Kunne selvfølgelig bare bruge det gode gamle DataGrid, men den har nogle renderingsproblemer, som er fixet i GridView...
Avatar billede dr_chaos Nybegynder
14. december 2005 - 14:11 #1
du kan sagtens databinde fra codebehind.
f.eks. ved at sætte gridview.datasource og så kalde databind() efterfølgende.
Avatar billede snepnet Nybegynder
14. december 2005 - 14:26 #2
hej david :o)

hvorfor er det et eksplicit krav at dit grid skal bruge custom paging ?!? - det virker temmelig underligt synes jeg.... performance skal vel bare være iorden - og hvordan du fikser det er vel sekundært eller ?

eller er det fordi du har et performanceproblem, som du forventer du kan løse ved at lave specialiseret paging?

... jeg forstår det ikke helt.

mvh
Avatar billede snepnet Nybegynder
14. december 2005 - 14:27 #3
(og bortset fra det - så synes jeg at du skal prøve de nye datasourcecontrol's .... de er bestemt ikke uden evner ;o)
mvh
Avatar billede dr_chaos Nybegynder
14. december 2005 - 14:29 #4
er helt enig med snepnet omkring datasource controls.
Jeg har bruge dem meget.
Avatar billede davidfossil Nybegynder
14. december 2005 - 14:41 #5
For at være ærlig, så har jeg endnu ikke fattet hvad jeg skal med datasourcecontrols... Så vidt jeg har kunne se i diverse eksempler, flyttes fx SQL kode ud i en SqlDataSource deklereret i aspx filen, frem for blot at blive hentet op som en DataTable programmatisk. At foretage database forespørgslen, og evt. bearbejde resultatet, hører efter min mening til i programkoden, ikke i ASPX-filen...?

Det kan godt være at jeg skal låne en bog om ASP.NET 2.0, for jeg kan simpelthen ikke se hvorfor man skulle ønske at lægge SQL logikken ud i ASPX-filerne =\
Avatar billede dr_chaos Nybegynder
14. december 2005 - 14:43 #6
ved at bruge objectdatasources kan du have logikken i en class fil og hente data med en datasource.
du skal bare skrive navnet på class og den method som henter data.
Avatar billede davidfossil Nybegynder
14. december 2005 - 15:21 #7
For at bruge en objectdatasource, skal jeg da ikke have en klasse der beskriver selve indholdet af hver enkelt række i min database? Fx klasserne Produkt, Kunde, Ordre etc. Denne løsning er sevlfølgelig flot og objekt orienteret, men alt for omstændig til det projekt jeg sidder med.
Avatar billede dr_chaos Nybegynder
14. december 2005 - 15:26 #8
nej det behøver du ikke.
du kan have en klasse. f.eks.
database.cs

i den har du en metode.
public dataset hentaltdatafratabel()
{
  dataset ds = hentdatafradatabase;
return ds;
}

på aspx siden behøver du bare:

<asp:GridView ID="GridView1" DataSource="test" AutoGenerateColumns="true" runat="server">
        </asp:GridView>
        <asp:ObjectDataSource ID="test" runat="server" TypeName="database" SelectMethod="hentaltdatafratabel"></asp:ObjectDataSource>
Avatar billede dr_chaos Nybegynder
14. december 2005 - 15:27 #9
gridview skal være

<asp:GridView ID="GridView1" DataSourceID="test" AutoGenerateColumns="true" runat="server">
        </asp:GridView>
Avatar billede davidfossil Nybegynder
14. december 2005 - 16:13 #10
Hmm, kunne denne metode ikke bare få lov at ligge i codebeside til den relevante side? Jeg kan ikke helt få det til at virke, hvis jeg vil have TypeName på min ObjectDataSource til at pege på den partielle klasse :(
Avatar billede snepnet Nybegynder
14. december 2005 - 16:17 #11
hej igen david :o)

vedr.: 14/12-2005 14:41:00

du bestemmer selv om du vil lægge sql-kode ud i din aspx-fil. det er en option du har, men bestemt ikke noget der stilles krav om.
du kan f.eks. angive metoder i dit datalag som dr_chaos's eksempel viser, eller navne på stored procedures.

desuden kan de fikse databinding, paging, caching og sorting for dig uden at du behøver at skrive noget som helst kode selv (GridView/SqlDataSourceControl). det er ikke blot en sql-container de har bygget.

alternativt kan du sikre dig at dit datalag understøtter "paged selects" mv, hvorved din frontend (GridView/ObjectDataSource) automatisk tilbyder dig det.

objectdatasource understøtter fint en fornuftig lagdeling, hvis det er det du er interesseret i, men når du nu selv siger at en flot objektorienteret løsning er for omstændig til det projekt du sidder med - så må den (i mine øjne) meget anstændige quick-and-dirty løsning de tilbyder da være et supergodt bud på en løsing ?!?

... nu var du jo sikkert bare lidt sarkastisk med de sidste linier du skrev, men det har da ingen betydning om den fil du skriver din sql i hedder .aspx eller .cs 

du svarede aldrig på hvorfor det var et krav med custom paging.... er det en hemmelighed ;o)

mvh
Avatar billede dr_chaos Nybegynder
14. december 2005 - 16:18 #12
ligger din klasse i et namespace ?
Avatar billede davidfossil Nybegynder
14. december 2005 - 16:41 #13
snep > Custom paging for at spare på SQL serveren. Ved ikke helt om vi snakker forbi hinanden, men det jeg ønsker er vel det samme som hvad du kalder "paged selects".

chaos > Lige nu gør den, idet den pågældende side er konverteret fra .NET 1.1 hvor alt jo lå i namespaces. Hvad er det lige der er meningen med at nye sider i 2.0 ikke tilhører noget namespace...?

Undskyld hvis jeg lyder bitter, men lige nu synes jeg kun at der er ballade med 2.0 - det går nok over :)
Avatar billede snepnet Nybegynder
14. december 2005 - 16:47 #14
ja - det tror jeg det gør... jeg synes nu der er mange ting der er blevet helt gode i 2.0 :o)

er det meget store mængder data du arbejder med - og er det nogle der ofte ændrer sig?

vær opmærksom på, at datasources direkte understøtter caching, så hvis det ikke er voldsomme datamængder du arbejder med kan du bare benytte en sqldatasource og slå caching til... det performer vældig fint.

du har endda mulighed for at lave noget rimelig fiks caching - særligt hvis du benytter sql server 2005.

mvh
Avatar billede davidfossil Nybegynder
14. december 2005 - 16:54 #15
Ja, jeg har læst om det og det lyder rigtig smart med den chaching. Her er der desværre tale om et "discount projekt" med MySql på datasiden :-(

Her er der tale om noget debatforum, hvor data ofte blive opdateret. Ved ikke hvor meget datamængden betyder performancemæssigt, men jeg er mere bekymret over belastningen af MySql serveren når jeg laver debatoversigten med 1000 subselects og joins... I det eksisterende 1.1 projekt har jeg derfor sørget for at den kun henter de linjer der skal vises, og det vil jeg gerne beholde i 2.0 implementeringen, hvor jeg dog gerne vil have mit DataGrid lavet om til et GridView.

Jeg tror min konklusion bliver at jeg må kigge nærmere på ObjectDataSource, og i mellemtiden må jeg bare fortsætte med at bruge min custom webcontrol der nedarver fra DataGrid og løser nogle af fejlene i renderingen...

P.S. Jeg er blevet lidt gladere igen, efter at have læst denne: http://west-wind.com/weblog/posts/2287.aspx
Avatar billede davidfossil Nybegynder
14. december 2005 - 17:14 #16
...men jeg er nu stadig meget interesseret i at vide hvor namespaces er blevet af? :)
Alle nye pages og class filer jeg opretter, ligger ikke i noget namespace?
Avatar billede dr_chaos Nybegynder
14. december 2005 - 17:16 #17
i objecdatasource kan du prøv med:

<asp:ObjectDataSource ID="test" runat="server" TypeName="ditnamespace.database" SelectMethod="hentaltdatafratabel"></asp:ObjectDataSource>
Avatar billede dr_chaos Nybegynder
14. december 2005 - 17:17 #18
man bruger ikke så meget namespaces mere på simple projekter.
vs.net 2005 opretter et app_code directory som class filer ligger i.
Man benytter dog namespaces hvis man f.eks. laver et eksternt class library.
Avatar billede davidfossil Nybegynder
14. december 2005 - 23:01 #19
Er det stadig "lovligt" at bruge namespaces i et web projekt, eller er det "dårlig stil"? Hvis man fx har et par custom controls tilknyttet det enkelte projekt, vil det måske være overkill at smide dem ud i et class library?

Ellers må jeg sige at det er rart at være sluppet af med namespaces for pages - det var alligevel bare noget ligegyldigt rod... :)
Avatar billede dr_chaos Nybegynder
15. december 2005 - 06:29 #20
det er stadigvæk lovligt men hvis det ikke er mange custom controls du har kan du bare fjerne namespacet.
Avatar billede dr_chaos Nybegynder
04. februar 2006 - 17:03 #21
Du mangler at lukke spørgsmålet.
Avatar billede davidfossil Nybegynder
30. marts 2006 - 22:23 #22
chaos og snep : Vil I ikke begge smide et svar så jeg kan få lukket den her? Beklager at jeg ikke har fået gjort det før, men spørgsmålene forsvinder jo nogle gange når man har travlt :)
Avatar billede dr_chaos Nybegynder
31. marts 2006 - 08:04 #23
går nok :)
Avatar billede snepnet Nybegynder
31. marts 2006 - 18:38 #24
jep - sådan går det jo :o)
mvh
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester