03. november 2010 - 10:44Der er
21 kommentarer og 1 løsning
alfabetisk pager
Hej
nogen som kan hjælpe mig med, at lave denne alfabetisk pager en smule om ?
private void CreatePagingsWithFirstLetter() { DataTable dtSelect = new DataTable();
if (this.ViewState["Paging"] == null) { SqlDataAdapter da = new SqlDataAdapter("Select Distinct Upper(Left(Title,1))[PageText], Upper(Left(Title,1)) [PageIndex] from Cars Order By PageText Asc", cnstr);
Å burde ikke blive til A ... så er der i hvert fald et eller andet helt galt. Hvad giver: SELECT LEFT('Æling', 1)
Hvis du kører overstående sql statement i SSMS ?
Hvad type er din column ?
hvorfor selector du samme værdi 2 gange i din SQL Query ?
Hvis du skal have alle bogstaver med, så ville jeg nok oprette en table med dem ... og så måske lave en join over på din anden table. Men det er også noget rod ...
bkp: Jeg får følgende fejl ved, at benytte din kode, som sortere efter title - (ORDER BY items must appear in the select list if SELECT DISTINCT is specified.)
Hvis den virker med sortering på PageText så bruger du bare den, men det undrer mig egentlig lidt hvorfor det virker, har du allerede et felt i din tabel der hedder PageText?
Alternativt kunne du oprette et View eller Stored Procedure som du kalder, det vil jeg anbefale istedet for at flytte alt SQL ned i koden, egentlig burde du måske kigge nærmere på SQL to LINQ eller Entity Framework, her arbejder du med objekter istedet, og her kan du arbejde med lister uden det store arbejde.
Grunden til at det andet ikke virker er at det du trækker ud indeholder ikke Title som du forsøgte at sortere på, så det du skal sortere på skal være det samme som du kører en Distinct på : Upper(Left(Title,1))
Hvis han skal fikse hans sorteringsfejl, skal han ændre sproget for hele databasen, men det er ikke nemt, det er faktisk ret besværligt at ændre når der er data. Det nemmeste er faktisk at bygge databasen på ny og sikre sig at man har valgt Dansk/Norsk, for ellers bruges forkert algoritme når der sorteres.
Derfor gav jeg ham tippet med at konvertere kollonnen til dansk sortering og ikke fransk eller hvad det er for en sortering databasen er sat op til, i det ovenstående view er alle data konverteret til dansk sorterings algoritme, så når han kalder dette view med en ORDER BY er data klar til dansk sortering.
Men du har ret i at det optimale var at bygge databasen på ny med rigtige indstillinger.
Jeg føler jeg gentager mig selv, men prøv at køre nedenstående sql i din SQL Editor, så tror jeg det siger mere end ord ;-)
DECLARE @Cars1 TABLE ( Title varchar(1) COLLATE Danish_Norwegian_CI_AS ) DECLARE @Cars2 TABLE ( Title varchar(1) COLLATE French_CS_AS )
INSERT INTO @Cars1 (Title) SELECT 'c' UNION SELECT 'æ' UNION SELECT 'a' UNION SELECT 'ø' UNION SELECT 'b' UNION SELECT 'å' UNION SELECT 'i' UNION SELECT 'h' UNION SELECT 'q' UNION SELECT 't'
INSERT INTO @Cars2 (Title) SELECT 'c' UNION SELECT 'æ' UNION SELECT 'a' UNION SELECT 'ø' UNION SELECT 'b' UNION SELECT 'å' UNION SELECT 'i' UNION SELECT 'h' UNION SELECT 'q' UNION SELECT 't'
SELECT 'Dansk', Title FROM @Cars1 ORDER BY Title SELECT 'Fransk', Title FROM @Cars2 ORDER BY Title SELECT 'Fransk > Dansk', Title FROM @Cars2 ORDER BY Title COLLATE Danish_Norwegian_CI_AS
Har arbejdet som DBA, så jeg har selv haft de samme problemer idet at jeg skulle joine data fra 2 databaser, hvor den ene var dansk og den anden var et andet sprog og det kunne kun løses med COLLATE.
Bare fordi han føler sig tilfreds, er det bestemt ikke den optimale løsning, da det ikke er et produktions system han sidder ved ... da han har stillet tidligere spørgsmål herinde, så ved jeg det er på hobby basis ... er jeg ret sikker på.
Derfor bør han løse det korrekt.
Du skriver jo også kun at han "føler" det er løst, men du må da kunne se det ikke er en optimal løsning. Det er en nødløsning, hvis man ikke må ændre i DB design, men det tvivler jeg så lidt på, da hans spørgsmål angiver han er ved at udvikle det :-)
Næst, så burde han også kunne lave den sortering i hans kode, og deraf helt slippe for at skulle lave et view :-) Hvis det kun er sortering der går galt.
"Vil gerne have ÆØÅ til sidst i min pager efter Z. Lige nu fucker det med, at Å bliver erstattet med A, Ø kommer efter O og Æ kommer efter A." skriver han.
Så har han tydeligvis forklaret sig forkert, der står jo at "Å" bliver erstatet med "A" ...
Du har så bare været heldig ikke at lægge så meget i hans forklaring :-)
Hehe ja jeg tror vi er meget enige når det kommer til stykket, vi har bare forskellig måde at sige det på, jeg er nok bare den diplomatiske type ;-) Men jeg vil give dig ret i at databasen burde være lavet rigtigt.
(ORDER BY items must appear in the select list if SELECT DISTINCT is specified.)
Jeg fandt ud af, at den mente det bogstavligt...
SELECT DISTINCT City COLLATE Danish_Norwegian_CI_AS from Users order by City COLLATE Danish_Norwegian_CI_AS
Altså COLLATE på både det man vælger, og på order by......
Synes godt om
Ny brugerNybegynder
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.