Har denna kod för att nestla i en repeater, men jag vill endast den som binder till ds, att den skriver ut 2 poster, om det finns fler än 2 poster... men vet inte riktigt hur jag skall gå tillväga.
Ds innehåller alla poster (alla counties som hör till id)
Något tips.?
Private Sub repScheduledbanners_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles repScheduledbanners.ItemDataBound
If e.Item.ItemType = ListItemType.Item Or e.Item.ItemType = ListItemType.AlternatingItem Then
Dim innerRep As Repeater = CType(e.Item.FindControl("innerRep"), Repeater)
Dim bannerscheduleId As Integer = e.Item.DataItem("BannerScheduleId")
' kasta ut innehållet counties.
Dim ds As New DataSet
ds = GetCounties(bannerscheduleId)
With innerRep
.DataSource = ds
.DataBind()
End With
End If
End Sub
..och är du bunden till att inte kunna eller vilja ändra på dina sql-satset så kan du alltid som undantag köra ditt dataset via en dataviewer och där lägga till filter för att åstadkomma det du vill. Kanske lite overkill, men... :)
..och är du bunden till att inte kunna eller vilja ändra på dina sql-satset så kan du alltid som undantag köra ditt dataset via en dataviewer och där lägga till filter för att åstadkomma det du vill. Kanske lite overkill, men... :)
Ja det är ju ett alternativ om nu inte usp:n tillåter en max 2. :)
Om du aldrig vill ha ut mer än 2 rader skall du göra denna begränsnnig i queryn. Finns inget som rättfärdigar att man skall hämta mer data än nödvändigt från databasen för att sedan sortera bort det i applikationen.
I min mening bör man alltid sträva efter en så prestanda optimal lösning som möjligt så länge det inte innebär allt för mycket extra arbete. För eller senare sitter man med en mer prestandakritisk applikation och har man alltid kodat enligt"best pratice" så faller det mer naturligt och man tjänar avsevärt mycket tid. Om inte annat så tänk på miljön eftersom lägre serverbelastning innebär lägre elkonsumption ;)
...Finns inget som rättfärdigar att man skall hämta mer data än nödvändigt från databasen för att sedan sortera bort det i applikationen.
...
Uj, såna här kategoriska uttalanden lockar verkligen till att gå i svaromål... ju längre man hållit på hackande kod så inser man att det finns alltid andra sätt som kan vara bra under vissa betingelser ;)
I detta fall kan det ju tex vara så att man kanske har läst ut en hel tabell i en DataTable som man sedan cachar på servern i 24 timmar som man använder sig av, för att _få_ prestanda ... finns säkert massa andra varianter också :bire
Både ja och nej. Prestanda och optimering vs tid och genvägar är alltid ett hett duskussionsämne. Men i nämnt antog jag av diskussionen att data skulle hämtas varje gång i vilket fall.
Vad är det senare som säger att du inte har bättre prestanda på att hämta data från databas varje gång (sökningen ligger ju även i cache i databasen med stor sannolikhet) jämfört med att ha ett enormt DataTable i serverminnet hela tiden och filtrera där varje gång. Jag sätter nog mina pengar på att databasen filtrerar snabbare än applikationen. beroende på storlek så är det ju inte säkert att man har prestande bara för att det ligger cache'at heller.
Jag menade bara hypotetiskt att det finns lägen där man inte vill/kan ändra sin sql-query att bara hämta just det aktuella antalet poster, vilket du påstod ;)
Om man ska spåna vidare på andra lägen där man inte vill prata med db, så finns det ju andra situationer, tex om sql query är hopplöst komplex med massa joins och tar lång tid att exekvera, vilket inte är helt ovanligt. Eller att man ska använda det aktuella DataSet till andra saker, binda till en gridView eller nåt.
Dessutom behöver inte DataTable vara enormt stor bara för att sql-frågan var komplex.
Om du aldrig vill ha ut mer än 2 rader skall du göra denna begränsnnig i queryn. Finns inget som rättfärdigar att man skall hämta mer data än nödvändigt från databasen för att sedan sortera bort det i applikationen.
Ja, om jag nu bara hade varit tvungen att endast hämta två rader hade det varit en annan sak... :)
Tänkte igenom lite grann och insåg att, doh!, du kan inte bara hämta 2 poster. För det jag skulle uppnå var att, dels visa:
om fler än 2 poster, visa
post1, post2... (punkterna menar att det finns fler poster, men de skall inte synas)
annars
post1, post 2 ( om det inte fanns mer än två poster, inga punkter)
Sen skulle dessa poster vara en asp:hyperlink utan navigateurl, men med en tooltip som visar alla poster när man hovrar ovanför posterna som syns.
Löste dock detta genom att dels kontrollera antalet rader i ds.Tables(0) , och de var mer än 2 så plocka endast ut 2 rader. men innnan detta så sökte jag fram kontrollen via FindControl för att sätta som tooltip hela ds:et.
Så nu funkar det som tänkte.. :)
Optimalt? Mja.. men det funkar..
261 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25