Hej, Hej Joachim Joachim, Hej o tack för era svar! Hmm... Jag trodde tanken med en relationsdatabas var att man kunda join:a och sånt, men jag vet iofs inte någonting om eran databas och tabellerna. Joach...Sorteringsproblem
Jag har en sida som listar ett sökresultat i en Repeater.
När man klickar på kolumner sorterar jag efter den.
Själva sökningen sker i en tabell(i datasetet) som heter CONTAINER, men sen finns det även ett par andra tabeller i datasetet. Bla en som heter PRODUCT.
Så det som listas är containrar.(det är det sqlsatsen söker efter)
Problemet är att vissa av rubrikerna är fält ifrån PRODUCT-tabellen.
Mina rubriker är linkbuttons och när jag klickar på en ser det ut så här:
Just denna är ett fält i CONTAINER-tabellen
Private Sub lbtnLocation_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lbtnLocation.Click
If Session("SortValue") = "LOCATION" Then
If Session("SortOrder") = "asc" Then
Session("SortOrder") = "desc"
Else
Session("SortOrder") = "asc"
End If
Else
Session("SortOrder") = "asc"
End If
Session("SortValue") = "LOCATION"
'Reload result panel
loadResultGUI()
End Sub
Sen binder jag detta så här:(i suben loadResultGUI())
'Save sort value in session object if user clicks on a sort button
If Session("SortValue") <> "" Then
sSortValue = Session("SortValue")
sSortOrder = Session("SortOrder")
Else
Session("SortValue") = "CONTAINER_ID"
Session("SortOrder") = "asc"
sSortValue = Session("SortValue")
sSortOrder = Session("SortOrder")
End If
'Apply sort to dataset
tdsContainer.Tables("CONTAINER").DefaultView.Sort = sSortValue & " " & sSortOrder
Problemet är ju på sista raden här,
<b>tdsContainer.Tables("CONTAINER").DefaultView.Sort = sSortValue & " " & sSortOrder</b>
Hur ska jag kunna sortera på fält som inte finns med i CONTAINER-tabellen?
Förstår ni hur jag menar?
Tacksam för hjälp, för jag har inte den blekaste hur man ska göra detta.
/Jocke
Sv: Sorteringsproblem
Ett sätt du skulle kunna göra på är att se till att SQL-satsen som du använder för att ladda "huvud"-tabellen JOIN:ar den andra tabellen, så att du får in LOCATION-kolumnen i samma tabell.
// MvH BjörneSv: Sorteringsproblem
Måste du lägga denna info i en session?
Du kan ju lika gärna lägga dem i globala variabler, eller kanske to m bygga upp sin sql sträng med en StringBuilder?
Eller om man gillar kuliga hjälpklasser (gör jag ;-) ) så kan du ju skapa en assembly som bygger upp denna query åt dig. typ QueryBuilder.
typ:
http://www.jdocs.com/cayenne/1.1/api/org/objectstyle/cayenne/map/QueryBuilder.html
Fördelen är att du då kan återanvända denna i liknande ärenden m.m.
Mvh JohanSv:Sorteringsproblem
Björn,
Enligt han som gör databaspaketen blir det inte bra att joina tabellerna i detta fallet, så det är nog inget alternativ(även om för min del hade varit perfekt...).
Johan,
Visst kan jag spara infon i variabler, men det är ju egentligen inte där problemet ligger. Jag får ju fortfarande samma problem med att sortera oavsett om det är en session eller en variabel.
Eller missförstår jag dig?
Tittade på länken om QueryBuilder. Jag förstår inte riktigt vad det är(jag är en enkel gui-utvecklare..), men så långt jag förstår borde inte detta vara aktuellt heller. All sql ligger i stored procedures.
Man kan inte joina tabeller i ett dataset uppe i GUI-lagret på något vis?
/JockeSv: Sorteringsproblem
Jag funderade lite DataRelations och DataViews, men kunde inte hitta någonting som skulle lösa det för dig.
Det kanske finns en fullösning där du lägger till en kolumn i din CONTAINER-tabell och manuellt fyller den med värdena från LOCATION-tabellen.
Dim tmp As New Hashtable(objDT.Rows.Count)
Dim dr As DataRow
For Each dr In locationDataTable.Rows
tmp.Add(dr("ID"), dr("LOCATION"))
Next
containerDataTable.Columns.Add(New DataColumn("LOCATION"))
For Each dr In containerDataTable.Rows
dr("LOCATION") = tmp(dr("LOCATION_ID"))
Next
Brr... Inte snyggt, men det kan kanske fungera.
// MvH Björne
Sv: Sorteringsproblem
Nej QueryBuildern löser inte ditt problem. Men du skulle genom att ha en sådan kunna bygga upp where satser etc... Såg ut som det var det du gjorde i din kod? Kollade dock inte så noga.
Mvh Johan