Avatar billede cogitans Nybegynder
13. april 2005 - 08:42 Der er 54 kommentarer og
1 løsning

Paging og sortering

Hvordan ændrer man teksten for overskriften i en kollone?
Avatar billede cogitans Nybegynder
13. april 2005 - 10:03 #1
Altså i et datagrid vil jeg gerne ændre kolloneteksten. Men hvor gøres dette?
Avatar billede burningice Nybegynder
13. april 2005 - 10:26 #2
hvordan har du sat dit datagrid ind på siden? Bruger du templating eller har du bare sat AutoGenerateColumns="true" ??
Avatar billede cogitans Nybegynder
13. april 2005 - 10:30 #3
Jeg har sat AutoGenerateColumns="true". Skal jeg bruge templating da? Hvis "ja", hvordan gør man det?
Avatar billede burningice Nybegynder
13. april 2005 - 11:00 #4
nej, du skal bare lade datagriddet autogenere dine kulonner og via tankeoverførsel skal den så helt selv omdøbe navnene på dem til det du gerne vil have dem til at hedde.

  <asp:DataGrid id="FAQs" runat="server"
    AutoGenerateColumns="False" CellPadding="2"
    HeaderStyle-BackColor="Black"
    HeaderStyle-ForeColor="White"
    HeaderStyle-HorizontalAlign="Center"
    HeaderStyle-Font-Bold="True">
  <Columns>
    <asp:BoundColumn HeaderText="ID" DataField="FAQID"  />
    <asp:BoundColumn HeaderText="FAQ Description" DataField="Description"  />   
  </Columns>
  </asp:datagrid>
Avatar billede cogitans Nybegynder
13. april 2005 - 11:17 #5
I mellemtiden har jeg fundet ud af at gøre det, hvis jeg benytter autogenerate.
Uden autogenerate kan jeg godt på atributten frem i datagrid'et, men ikke selve xmlfeltnavnet. Hvordan får man det frem?
Avatar billede cogitans Nybegynder
13. april 2005 - 11:35 #6
Den påstår, at den ikke kan finde et felt med det angivne navn i dokumentet. Men jeg har selvfølgelig checket, at det både findes og staves på samme måde i xmldokumentet.
Avatar billede cogitans Nybegynder
13. april 2005 - 11:44 #7
Det skriver jeg med "navn_text".
Så får jeg blot et problem med at sortere. Men det er vel blot sorteringsalgoritmen, som jeg skal se på igen...
Avatar billede burningice Nybegynder
13. april 2005 - 11:52 #8
hvad bruger du som datasource til dit grid?

DataField skulle gerne henvise til navnet på den kulonne/property på det enkelte object i din collection du bruger som datasource.

dit at sortere med er det meget afhængigt af hvilket datasource du bruge. Ved en datatable vil man typisk bruge et DataView, mens man i f.eks. en custom collection selv skal implementere en Sort-metode som skal kaldes før man binder datagriddet igen.
Avatar billede cogitans Nybegynder
13. april 2005 - 12:30 #9
Som datasource har jeg et xmldokument, hvor elementerne er af formattet: <tekst tal="*">
Jeg kan godt få "tal" ud, men "teksten" kommer ikke ud.
Tekstfeltet sorterer jeg vha. "ASC" og "DESC". Men denne metode fungerer ikke, når det er et tal, der er tale om. Hvis jeg benytter den aligevel, så sorterer den efter:
1
10
11
.
.
.
2
20
21
osv.
Avatar billede cogitans Nybegynder
13. april 2005 - 13:28 #10
hmmm...jeg kunne jo selvfølgelig bare sætte et '0' ind foran '1', '2', osv. Så fungerer det nemlig.
Avatar billede burningice Nybegynder
13. april 2005 - 13:33 #11
men hvad er så kulonne-navn, og hvad er værdien for en enkelt celle?
Avatar billede cogitans Nybegynder
13. april 2005 - 13:51 #12
Det ene kolonnenavn er atributnavn, og det andet kolonnnenavn er xmlelementnavn_text.
Værdien er streng, og i den anden er den vel også streng.
Avatar billede cogitans Nybegynder
13. april 2005 - 14:23 #13
Men hvis jeg nu vil have byttet om på rækkefølgen af de 2 kolloner (altså så #1 står på plads #2), hvordan gøres dette så, når jeg benytter "AutoGenerateColumns"?
Avatar billede burningice Nybegynder
13. april 2005 - 15:19 #14
det kan du ikke... det er derfor man bruger templating, så at man selv kan bestemme hvordan datagriddet skal se ud.

Men det lader til der ikke helt er styr på hvordan strukturen i xmldokumententet er skruet sammen, så i så fald er det jo bare at bruge DataField til at definere hvilken kulonne i dit datasource kulonnen i datagriddet skal svare til.
Avatar billede cogitans Nybegynder
13. april 2005 - 15:57 #15
Jo, men hvis jeg sætter AutoGenerateColumns=false, så mister jeg også muligheder for at trykke på feltnavnet, og derved få datafelterne sorteret. Kan man slå denne egenskab til på en anden måde, hvis man har sat AutoGenerateColumns=false?
Avatar billede burningice Nybegynder
13. april 2005 - 16:00 #16
Avatar billede cogitans Nybegynder
13. april 2005 - 16:19 #17
En smule, ja.
Hidtil har jeg benyttet:
if (sortfield == e.SortExpression.ToString())
  if (sortorder == "ASC")
    sortorder = "DESC";
  else
    sortorder = "ASC";
else
  sortorder = "ASC";
sortfield = e.SortExpression.ToString();
DoDataBind();

Det kan jeg så ikke mere? Ellers skal koden flyttes ind i head-sektionen, og så skal jeg selv skrive sorteringsalgoritmen?
Avatar billede burningice Nybegynder
13. april 2005 - 16:37 #18
det skulle skam meget gerne være det samme... bare du sørger for at lægge koden i din SortCommand-eventhandler
Avatar billede cogitans Nybegynder
13. april 2005 - 16:40 #19
Ah - vil det så sige, at jeg skal override/overload SortCommand-eventhandleren i codebehindfilen?
Avatar billede burningice Nybegynder
13. april 2005 - 16:48 #20
normalt vil man bare gøre sådan her:

<asp:datagrid id="noget" SortCommand="noget_SortCommand" runat="server" />

protected void notet_SortCommand(object sender, DataGridSortCommandEventHandler e) {
  if (sortfield == e.SortExpression.ToString())
  if (sortorder == "ASC")
    sortorder = "DESC";
  else
    sortorder = "ASC";
else
  sortorder = "ASC";
sortfield = e.SortExpression.ToString();
DoDataBind();
}
Avatar billede cogitans Nybegynder
13. april 2005 - 17:13 #21
Jeg kan ikke skrive "SortCommand" i datagrid-linien. Kommandoen bliver ikke genkendt. Hvis jeg skriver det under "BoundColumn", så hedder den "SortExpression". Dette resulterer i, at columnoverskriften fungerer som et link. Men når jeg trykker på linket, så sker der intet. Hvor er fejlen?
Avatar billede cogitans Nybegynder
13. april 2005 - 18:03 #22
Kommandoen hedder "OnSortCommand="DoDataBind"". Men når jeg skriver det (og DoDataBind har tilgangen "protected"), så får jeg fejlen:
"
Metoden DoDataBind()' passer ikke til stedfortræderen 'void System.Web.UI.WebControls.DataGridSortCommandEventHandler(object, System.Web.UI.WebControls.DataGridSortCommandEventArgs)'
"
Er det void, som er problemet eller hva'?
Avatar billede burningice Nybegynder
13. april 2005 - 18:03 #23
så hedder det nok OnSortCommand
Avatar billede burningice Nybegynder
13. april 2005 - 19:38 #24
og hvordan ser signaturen for DoDataBind ud?
Avatar billede cogitans Nybegynder
13. april 2005 - 21:15 #25
Nu ved jeg ikke lige, hvad du mener med "signatur". Men jeg har på fornemmelsen, at det er dette, du mener (?):
protected void DoDataBind()
Avatar billede burningice Nybegynder
13. april 2005 - 21:41 #26
ja... :) det er det man kalder en signatur.

Som du kan se i fejlbeskeden, så passer den signatur jo ikke overens med dette:

void System.Web.UI.WebControls.DataGridSortCommandEventHandler(object, System.Web.UI.WebControls.DataGridSortCommandEventArgs)

det skal den (!)

men der er jo mit forslag i 13/04-2005 16:48:23
Avatar billede cogitans Nybegynder
13. april 2005 - 22:06 #27
Jo, men der benytter jeg signaturen:
private void DataGrid1_SortCommand(object source, System.Web.UI.WebControls.DataGridSortCommandEventArgs e)

og i slutningen af dén metode kaldes DoDataBind(). Så passer signaturen ikke aligevel (den er vel bare delt op på 2 metoder)?
Avatar billede burningice Nybegynder
13. april 2005 - 22:12 #28
:) det er ligemeget... så længe at den metode SortCommand-event kalder har den rette signatur er det fuldstændig ligemeget hvad metoden gør bagefter, hvilken kode den har og hvilkde metoder den evt. måtte kalde videre hen.
Avatar billede cogitans Nybegynder
13. april 2005 - 22:57 #29
Så jeg skal altså lave de 2 metoder om til 1 metode, som har den rigtige signatur for sortCommand?
Avatar billede burningice Nybegynder
13. april 2005 - 23:02 #30
det er nok en dum idé.. behold du din DoDataBind()-metode men lav en eventhandler til SOrtCommand på dit datagrid som så sørger for at kalde DoDataBind(), og evt. laver det der sortorder-gejl du skrev i 13/04-2005 16:19:05
Avatar billede cogitans Nybegynder
13. april 2005 - 23:37 #31
Har jeg ikke allerede gjort det, når jeg har denne:
private void DataGrid1_SortCommand(object source, System.Web.UI.WebControls.DataGridSortCommandEventArgs e)
?
Det er inde i den, hvor mit "gejl" står. Og sidst i den kaldes DoDataBind().
Avatar billede burningice Nybegynder
14. april 2005 - 07:46 #32
jo, men hvis du har det er det helt fint.

du skrev bare at du vil lave de to metoder om til een, altså tage hele indholdet fra DoDataBind og lægge det ind i DataGrid1_SortCommand. Det var det jeg kommenterede på og syntes du skulle lade være med.
Avatar billede cogitans Nybegynder
14. april 2005 - 10:37 #33
Jam okay. Men hvad gør jeg så nu?
Avatar billede burningice Nybegynder
14. april 2005 - 11:44 #34
det kommer an på hvad du vil. Jeg er lidt i vildrede her.

Dit oprindelige spørgsmål omhandlede at du selv kunne definere navnene på dine kulonnetitler. Det går jeg ud fra du har fået til at virke. Så er du gået i gang med at spørge om en masse sorting, og jeg har forsøgt at svare så godt jeg nu engang kunne.

Jeg er i tvivl om, om sorting virkede før du indførte en template på dit grid, eller om du skal have bygget sorting op fra bunden. Og hvor kommer paging ind i billedet? (Ja, dit spørgsmål hedder Paging og Sorting).

Er der nogen helt konkret som driller, eller er det hele dit grid som ikke virker?
Avatar billede cogitans Nybegynder
14. april 2005 - 13:07 #35
Sorteringen virkede fint nok, før jeg "AutoGenerateColumns=false". Sorteringen skal selvfølgelig virke. Men jeg vil også kunne definere overskriften på mine kolloner. Derfor sætter jeg "AutoGenerateColumns=false". Så kan jeg godt få de rigtige overskrifter til kollonerne ind. Men så kan man ikke trykke på dem, så data i kollonerne bliver sorteret derefter.
Sorteringsalgoritmen skulle være implementeret korrekt i filen.
Paging fungerer også fint nok. Så den del kan vi vist godt bare se bort fra. Derfor er det sorteringen ved "AutoGenerateColumns=false", som driller.
Avatar billede burningice Nybegynder
14. april 2005 - 13:39 #36
men havde du ikke nogen SortCommand-eventhandler før?
Avatar billede cogitans Nybegynder
14. april 2005 - 15:43 #37
jo, det havde jeg. Sorteringen virkede jo, som sagt, godt nok med "AutoGenrateColumns=true". Den kan bare ikke kaldes med "AutoGenrateColumns=flase", da overskriften så ikke fungerer som et "link". Men det er vel fordi, at der ikke er knyttet en eventhandler til kolloneoverskriften?
Avatar billede burningice Nybegynder
14. april 2005 - 15:53 #38
hvis du sætter SortExpression på dine boundcolumns burde det virke

                        <asp:datagrid id="DataGrid1" runat="server" OnSortCommand="DataGrid1_SortCommand" AllowSorting="True" AllowPaging="True" Height="500px" AutoGenerateColumns="False">
                            <Columns>
                                <asp:BoundColumn DataField="Titel_text" HeaderText="Kursus" SortExpression="Titel_text" />
                                <asp:BoundColumn DataField="id" HeaderText="Id" SortExpression="Id" />
                            </Columns>
                            <PagerStyle Mode="NumericPages" />
                        </asp:datagrid>
Avatar billede cogitans Nybegynder
14. april 2005 - 16:08 #39
Det mener jeg bare, at jeg har prøvet (det er jo rimeligt oplagt). Det kan jo være, at jeg bare ikke har kaldt metoden rigtig. Men jeg vil lige efterchecke, når jeg kommer hjem.
Skal OnSortCommand="DataGrid1_SortCommand" være et kald til den metoden "DataGrid1_SortCommand", eller hedder metoden bare "SortCommand", som så kaldete vha. "DataGrid1_SortCommand"?
Avatar billede burningice Nybegynder
14. april 2005 - 16:13 #40
nej... metoden hedder DataGrid1_SortCommand(...)

OnSortCommand er bare en funktionalitet til at definere hvilken metode der skal udføres ved det givne event (så, DataGrid1_SortCommand er det man kan for en eventhandler)
Avatar billede cogitans Nybegynder
15. april 2005 - 09:56 #41
Tja, nu fungerer sorteringen. Alfa og omega var <SortExpression="Titel_text">. Men nu er pagingfunktionalitteten jo røget sig en tur. Og den er jo kritisk nødvendig (se overskriften). Så...hvorfor er den pludselig væk?
Avatar billede burningice Nybegynder
15. april 2005 - 10:02 #42
dunno... den virker når sorteringen er slået fra, eller hvad?
Avatar billede cogitans Nybegynder
15. april 2005 - 10:11 #43
Næh, den virker heller ikke, når sorteringen er slået fra. Men paging virkede jo fint nok i begyndelsen.
Avatar billede cogitans Nybegynder
15. april 2005 - 10:13 #44
Jeg ved ikke, om det har noget at sige. Men i "BoundColumn"-linierne har jeg altså ikke sluttet linien af med '/'. Hvis jeg sætter det tegn ind i linien, så giver det en kompileringsfejl.
Avatar billede cogitans Nybegynder
15. april 2005 - 10:14 #45
Ah - det tegn ('/') har jeg også udeladt i linien <PagerStyle Mode="NumericPages" />. Og det er vel denne linie, som står for pagingdelen?
Avatar billede burningice Nybegynder
15. april 2005 - 10:20 #46
har du en eventhandler til DataGrid.PageIndexChanged ?
Avatar billede burningice Nybegynder
15. april 2005 - 10:22 #47
at afslutte med /> gør bare at du kan skrive

<asp:BoundColumn DataField="id" HeaderText="Id" SortExpression="Id" />

istedet for

<asp:BoundColumn DataField="id" HeaderText="Id" SortExpression="Id"></asp:BoundColumn>


funktionsmæssigt er der ingen forskel, det er kun kosmetisk
Avatar billede cogitans Nybegynder
15. april 2005 - 10:26 #48
Jeg skulle da mene, at jeg har en eventhandler:

private void DataGrid1_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
{
    DataGrid1.CurrentPageIndex = e.NewPageIndex;
    DoDataBind();
}
Avatar billede burningice Nybegynder
15. april 2005 - 10:44 #49
jo, men har du hooket den op på dit datagrid?

evt.

<asp:datagrid id="DataGrid1" runat="server" OnSortCommand="DataGrid1_SortCommand" OnPageIndexChange="DataGrid1_PageIndexChanged" AllowSorting="True" AllowPaging="True" Height="500px" AutoGenerateColumns="False">

eller

DataGrid1.PageIndexChanged += new DataGridPageChangedEventHander(DataGrid1_PageIndexChanged);
Avatar billede cogitans Nybegynder
15. april 2005 - 11:04 #50
Næ, den var ikke sat ind. Men når jeg gør det, så kommer en "streg" under kommandoen. Så der er et eller andet forkert. Jeg kan dog godt køre det. Funktionalitteten er der bare ikke.

I codebehindfilen mangler eventhandleren vist også. Men når jeg sætter den ind, så siger den, at DataGridPageChangedEventHander ikke kunne findes.
Avatar billede cogitans Nybegynder
15. april 2005 - 11:04 #51
Der manglede et 'l' i 'eventhander'. Nu fungerer det.
Avatar billede burningice Nybegynder
15. april 2005 - 11:11 #52
det var da utroligt med dig... du er da fuldtændig naiv. Kopierer min kode uden nogen som helst form for kritik overhovedet.

Hvis jeg skrev noget kode der slettede alt på din computer og sagde at du bare skulle bruge det, ville du så gladedeligt gøre det?
Avatar billede cogitans Nybegynder
15. april 2005 - 13:14 #53
Rooolig nu, Heidi.
Jeg går automatisk ud fra, at indlæggende her på sitet er alvorlige, og de derfor også gennemtænkt/testet.
Det kan være, at jeg har fået den "forkerte" indstilling som følge af, at jeg er blevet hjulpet af andre personer på sitet, som netop gennemtestede koden, og at de virkelig gik op i det faktum "at hjælpe"!
Avatar billede burningice Nybegynder
15. april 2005 - 15:28 #54
jeg kan jo ikke teste hver eneste lille linje, og når man bare skriver det uden intellisense så kan der godt snige sig en stavefejl ind.

Det er fair nok at melde tilbage at noget kode ikke virker, men at lægge et indlæg om at  compileren brokker sig over DataGridPageChangedEventHander, når der skulle have stået DataGridPageChangedEventHandLer, så kan jeg faktisk godt blive noget irrereteret.

Du kan mene om mig hvad du har lyst. Men på samme måde som du forventer at dem der hjælper gennemtester deres forslag, så forventerer jeg også et vis niveau af spørgeren. På samme måde som vi skal sætte os ind i din problemstilling, så bør du også selv sætte dig ind i den. Hvilken hjælp er det bare at få en kodestump, paste den ind, se det virke og så ikke tænke mere over det. Det er meningen man også skal FORSTÅ hvorfor det hænger sådan sammen. Hvorfor at netop den kodestump løste problemet.
Avatar billede cogitans Nybegynder
15. april 2005 - 17:27 #55
Ja, neeeemlig ja!
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
Kurser inden for grundlæggende programmering

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