Hej, Ingen som har någon idé? Det finns ju en funktion på DataView som heter Sort så det kanske går att göra nåt sånt här innan du tilldelar pdsLabBook sin datasource. Tack Martin!! Okej, en följdfråga: Ok, först en fråga tillbaka då. Varför har du lagt sorteringsknapparna i Repeatern? Det kan man ju så klart göra och i det fallet skulle jag sätta ett CommandArgument och CommandName på länkarna och sen hantera eventen i ItemCommand-funktionen för Repeatern. Jo, för att repeatern generear ju en tabell och jag vill ha mina rubriker i samma bredd som listan nedanför. Jag vill alltså ha allt i samma html-tabell i slutändan. OK, två olika approacher :-) Martin,Sortera en PagedDataSource
Jag har en repeater som jag använder PagedDataSource för att få paging på en söksida(resultatsidan).
Det fungerar bra, men jag behöver få till sortering också. Användaren skall alltså kunna klicka på rubrikerna och sortera resultatet.
Så här ser denna del av koden ut:
(getLabBooks() hämtar rätt böcker från databasen)
'Only get lab books once and then store the dataset in a session object
tdsLabBook = CType(Session.Item("tdsLabBookTemp"), tdsLabBookComplete)
'If no session, get lab books from database and add them to session.
If tdsLabBook Is Nothing Then
tdsLabBook = getLabBooks()
Session("tdsLabBookTemp") = tdsLabBook
End If
If Not tdsLabBook Is Nothing Then
'Use PagedDataSource class for paging
pdsLabBook = New PagedDataSource
pdsLabBook.DataSource = tdsLabBook.Tables("LABBOOK").DefaultView
'Allow paging
pdsLabBook.AllowPaging = True
'Number of hits per page from user selection in the search form
pdsLabBook.PageSize = cboDisplay.SelectedItem.Value
'Total number of pages in search result
iNoOfPages = pdsLabBook.PageCount
'Set number of pages in a textbox as well, to store this between postbacks
txtPageCount.Text = iNoOfPages
'What page number you are at
pdsLabBook.CurrentPageIndex = CType(txtPageNumber.Text, Integer)
'Display buttons, Next,Previous, Last and First(used in paging)
btnPrev.Visible = True
btnNext.Visible = True
btnFirst.Visible = True
btnLast.Visible = True
'If you are at the first page(paging), disable Back page button and First page button
If pdsLabBook.IsFirstPage Then
btnPrev.Enabled = False
btnFirst.Enabled = False
Else
btnPrev.Enabled = True
btnFirst.Enabled = True
End If
'If you are at the last page(paging), disable Next page button and Last page button
If pdsLabBook.IsLastPage Then
btnNext.Enabled = False
btnLast.Enabled = False
Else
btnNext.Enabled = True
btnLast.Enabled = True
End If
'Display which is the current page being displayed
lblCurrentPage.Visible = True
lblCurrentPage.Text = " | Page <b>" + (pdsLabBook.CurrentPageIndex + 1).ToString() & "</b> of " & iNoOfPages & " | "
'Bind repeater to the PagedDataSource
rptMyLabBooks.DataSource = pdsLabBook
rptMyLabBooks.DataBind()
End If
Kan man få lite hjälp snälla!
/Jocke
Sv: Sortera en PagedDataSource
Jag skulle behöva lösa detta under dagen, så jag blir väldigt tacksam om någon vänlig själ kan hjälpa mig...!!
/JockeSv:Sortera en PagedDataSource
tdsLabBook.Tables("LABBOOK").DefaultView.Sort = sortexpression
Inte säker men kanske nåt att kolla på. Annars får du kanske skapa ett DataView-objekt från tdsLabBook.Tables("LABBOOK") och göra sorteringen på det objektet.Sv: Sortera en PagedDataSource
Det verkar funka så långt.
Jag har faktiskt varit inne på det spåret men tänkte nog inte tillräckligt långt.....
Jag hör kanske av mig igen, men förhoppningvis inte..:)
/JockeSv:Sortera en PagedDataSource
Sorteringen funger i sig.
Men ett annat problem i samma veva:
Man ska alltså klicka på rubrikerna för att sortera och rubrikerna har jag lagt som linkbuttons.
Problemet är att dessa hamnar inne i repeatern och får ett helt annat ID än vad jag ger. Därför kommer man aldrig in i Click-eventet...
Kan man inte göra så här att man skapar "manuell" sub i codebehind som man anropar via onClick på linkbutton:en?
Typ så här:
I html-koden
<asp:LinkButton id="lbtnLocation" onClick="<# SortColumn() %> runat="server" Width="100">Location</asp:LinkButton>
Sen i code behind:
Public Sub SortColumn()
'Lite sorteringskod....som alltså funkar i sig
End Sub
När jag försökar köra detta smäller det ordentligt..
Vad gör jag för fel??
/Jocke
Sv: Sortera en PagedDataSource
Annars kan du ju lägga dina LinkButtons utanför Repeatern så kan du får dina OnClick-event så som du vill ha dom.Sv:Sortera en PagedDataSource
<b>i det fallet skulle jag sätta ett CommandArgument och CommandName på länkarna och sen hantera eventen i ItemCommand-funktionen för Repeatern.</b>
Detta var lite kineskiska för mig.. hur menar du här?
/JockeSv: Sortera en PagedDataSource
1.
Ett tips kan vara att skapa tabellen utanför Repeatern och då lägga dina LinkButtons utanför repeatern. Nåt i den här stilen (ej komplett kod);
<table>
<tr>
<td><asp:linkbutton id="lnk" runat="server">Länk</asp:linkbutton></td>
</tr>
<asp:repeater id="rep" runat="server">
<ItemTemplate>
<tr><td><%#container.dataitem("tabellrad")%></td></tr>
</ItemTemplate>
</asp:repeater>
</table>
På så vis kommer tabellens kolumner fortfarande ha samma bredd i hela tabellen och du kommer åt linkbuttons onclick.
2.
Vet inte hur din repeater ser ut men det låter som att du lägger LinkButtons i headertemplaten. Då kan du göra nåt sånt här.
Exempel på Repeater:
<code>
<asp:Repeater id="Repeater1" runat="server">
<HeaderTemplate>
<table>
<tr>
<td><asp:LinkButton ID="lnk" Runat="server" CommandArgument="test" CommandName="sort">test</asp:LinkButton></td>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr><td><%#container.dataitem("name")%></td></tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
</code>
CodeBehind:
<code>
Private Sub Repeater1_ItemCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.RepeaterCommandEventArgs) Handles Repeater1.ItemCommand
Select Case e.CommandName
Case "sort"
'sortera på e.commandargument
End Select
End Sub
</code>
Du sätter alltså CommandName till Sort eller nåt liknande och som commandargument sätter du kolumnnamnet som du vill sortera din datakälla på.
Hoppas det låter förståeligt.Sv:Sortera en PagedDataSource
Du har räddat min dag!!
Precis, jag hade mina linkbuttons i headertemplaten. Kanske nu i efterhand inte så smart, men jag hinner inte ändra det nu.
Så jag är otroligt tacksam att du hade en alternativ lösning!!
Tack!
/Jocke