Avatar billede unipeg Nybegynder
06. december 2002 - 16:25 Der er 3 kommentarer og
1 løsning

(ASP.NET) DataGrid problem, HeaderTemplate med AllowSorting

Hej alle.

Jeg har et DataGrid som jeg skal kunne sortere i. Det er jo ganske simpelt, ved det at AllowSorting=True på DataGrid'et og på de kolonner jeg ønsker sorterbare sættes SortExpression-propertien til en passende værdi (kolonnenavnet fx.).
Dette betyder at der i DataGrid-headeren kommer en LinkButton som affyrer et DataGridSortCommandEvent. Men hvis jeg vil udskifte den automatisk generede header med min egen, vha. en HeaderTemplate siger Microsoft at man selv skal lave den rette sorterings-knap, iht.:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemwebuiwebcontrolsdatagridclassallowsortingtopic.asp

Men hvordan gør jeg mon det? Jeg har prøvet forskelligt, men intet virker. Ka' nogen hjælpe?


Mvh,
  Per
Avatar billede midas_dk Nybegynder
09. december 2002 - 14:19 #1
Altså, du har en templatecolumn som er defineret som nedenfor, ikke?

<asp:TemplateColumn HeaderText="Navn" SortExpression="last_name">

DataGrid'en har så samtidig en OnSortCommand="EtFunktionsNavn" defineret. Det er denne funktion, du selv skal lave. Input til denne funktion er Sender As Object og e As DataGridSortCommandEventArgs. Omdan dit DataSet til et DataView og sæt
ditdataview.Sort = e.SortExpression
- sæt dataviewet som datasource til datagriden, og bind dine data igen. Det er én måde at gøre det på.

Gi'r det nogen mening?
Avatar billede sysrq2000 Nybegynder
09. december 2002 - 14:24 #2
At sortere fra en template column er ikke så svært endda.
Først laver du en template column med en template header og en knap:
-----
<asp:TemplateColumn>
  <HeaderTemplate>
    <asp:ImageButton id="ImageButton1" runat="server"></asp:ImageButton>
  </HeaderTemplate>
</asp:TemplateColumn>
-----

Derefter laver du koden der bliver kørt på knappens click event:
-----
Private Sub ImageButton1_Click(ByVal sender As System.Object, ByVal e As System.Web.UI.ImageClickEventArgs)
  MyDataTable.DefaultView.Sort = "template asc"
  MyDataGrid.DataSource = MyDataTable.DefaultView
  MyDataGrid.DataBind()
End Sub
-----

Håber du kan bruge det.

Mvh.
Johannes Hansen
Avatar billede unipeg Nybegynder
09. december 2002 - 14:39 #3
Hejsa

Jeg kan sagtens sortere en TemplateColumn. Det er ikke problemet mere. Det er ikke et problem at få knappen i HeaderTemplate'en til at affyre en DataGridSortCommandEvent. Dertil skal man bare angive: 'CommandName="Sort"' i den WebControl man nu vil ha' til at trigge sortering.
Men til gengæld bliver SortExpression-property fra kolonnen ikke ført samme med eventen! Man kan kun udtrække den tomme streng herfra. Jeg regner med det er en bug i dotnet.
Jeg fik løst problemet (med en hånd fra Z42Cool) ved at lave min egen eventhåndtering (med en OnCommand, og så bruge CommandName og CommandArguemnt til at flytte parametre med over til eventhandleren).

Mvh,
  Per
Avatar billede sysrq2000 Nybegynder
09. december 2002 - 15:13 #4
Prøv at læs denne artikel:

http://www.dotnetbips.com/displayarticle.aspx?id=146

Man bliver nødt til at definere sit sort expression i buttonens CommandArgument parameter...
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