12. marts 2006 - 14:49Der er
21 kommentarer og 1 løsning
Side inddeling med objectdatasource
Hejsa eksperter
Jeg har et ønske om at vise et antal rækker fra en database pr. side, som jeg har ladet gøre ved brug af GridView og ObjectDataSource i .NET 2.0.
Jeg har sat den til at vise 6 rækker pr. side, og det hele fungerer som det skal. Jeg har så lavet metoden i ObjectDataSourcen således, at den på nogen sider returnerer 6 rækker, nogen 3 rækker, nogen 5 rækker osv. Spørgsmålet er så, hvordan jeg kan få GridView'et til at sende antallet af viste rækker tilbage til metoden?
Man opstiller metoderne således: public int SelectCount(int survey_id, ObjectDataSourceSelectingEventArgs e)...
public QuestionCollection SelectQuestionList(int survey_id, ObjectDataSourceSelectingEventArgs e) ...
public QuestionCollection SelectQuestionList(int survey_id, ObjectDataSourceSelectingEventArgs e, int maximumRows, int startRowIndex) ...
SelectQuestionList med flest argumenter, er den som gør hele arbejdet. GridView'et kalder automatisk metoden med startRowIndex med antallet af rækker man har set. Det er så denne variabel jeg godt kunne tænke mig at "override", ved at sende antallet af viste rækker plus det tidligere offset med til metoden i stedet...
Men jeg kan desværre ikke få det til at virke. Det virker fint, hvis jeg bare skal vise 6 rækker pr. side. Men når jeg nu i while loopen laver en break, forårsager det, at den kun viser f.eks. 3 rækker. Men GridView'et sender stadig 6 rækker mere til startRowIndex, som egentlig kun skulle være steget med 3, da jeg kun viser 3 på siden..
Du kunne evt. gøre som Sean Chase gør i sin anden artikel om emnet (http://www.unboxedsolutions.com/sean/archive/2006/01/21/843.aspx). Du kunne nemlig bruge HttpContext.Current.Items, hvor du i SelectQuestionList(int survey_id, ObjectDataSourceSelectingEventArgs e, int maximumRows, int startRowIndex) går ind og gemmer antallet af rækker du har sendt. Når du så får det andet kald, kan du udlæse hvor mange rækker du allerede har leveret, og så benytte dette tal i stedet for maximumRows.
Hmm, jeg synes ikke jeg kan få det til at virke...
HttpContext.Current.Items["rowCountCurrent"] og rowCountTotal er Null, når jeg i debuggeren kommer ind i metoden SelectQuestionList.
public QuestionCollection SelectQuestionList(int survey_id, int maximumRows, int startRowIndex) { QuestionCollection questionCollection = new QuestionCollection(); QuestionItem questionItem; if (HttpContext.Current.Items["rowCountCurrent"] != null) { maximumRows -= (int)HttpContext.Current.Items["rowCountCurrent"]; startRowIndex += (int)HttpContext.Current.Items["rowCountCurrent"]; }
using (SqlConnection connection = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["valuemakerConnectionString"].ConnectionString))
HttpContext.Current.Items["rowCountCurrent"] skulle helst være null første gang du kommer ind i metoden. Men anden gang skulle den meget gerne indeholde antallet af rækker, som du returnerede under sidste kald til metoden. Er den også null ved andet kald???
Hmm... var det ikke dr_chaos der skulle have haft de points? Hvis du har lavet en klasse som bruger hans svar, var det vel ham der skulle have haft points - og ikke dig selv?
Det var da en utrolig dårlig grund til at beholde sine points selv... især når grunden til, at den har været åben lidt for længe er din egen...
Så vidt jeg kan se, kom dr_chaos' svar kun 4 timer efter dit sidste indlæg. Så det er jo ikke fordi dr_chaos har ventet et halvt år med at komme med et svar - det er vist dig, der har ventet et halvt år (="lidt for længe")...
Det er såmænd ikke fordi 100 points er særlig vigtige... det var mere princippet i det. Eksperten.dk er et sted hvor man kan hjælpe hinanden. Er der en bruger der hjælper en anden bruger ved at give et rigtigt svar på et spørgsmål, udløser det en mængde points bestemt af brugeren der har et spørgsmål. At brugeren med spørgsmålet så kommer et halvt år efter og lukker spørgsmålet uden at give de aftalte points til brugeren med det korrekte svar - det er lidt forkert brug af sitet... og hvis man går op i points, kan 100 points her og 100 points der vel godt betyde noget i sidste ende?
Men som sagt er det mest princippet i det... jeg kan under alle omstændigheder være ret ligeglad - for jeg skal alligevel ikke ha' nogen points :-)
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.