7 Stimmen

Gridview-Paging über ObjectDataSource: Warum wird maximumRows auf -1 gesetzt?

Also, bevor ich versucht, benutzerdefinierte Gridview Paging über ObjectDataSource... Ich glaube, ich habe jedes bekannte Tutorial gelesen, nur um sicher zu sein, dass ich es verstanden habe. Es sah nicht wie Raketenwissenschaft.

Ich habe die AllowPaging = True in meiner Rasteransicht.

Ich habe angegeben PageSize="10" in meiner Rasteransicht.

Ich habe die EnablePaging="True" auf die ObjectDataSource.

Ich habe die 2 Paging-Parameter hinzugefügt (maximumRows & startRowIndex) in die Select-Methode meines Business-Objekts ein.

Ich habe eine analoge "count"-Methode mit der gleichen Signatur wie die select-Methode erstellt.

Das einzige Problem, das ich zu haben scheine, ist während der Ausführung... die ObjectDataSource liefert mein Geschäftsobjekt mit einem maximumRows-Wert von -1 und ich kann mir beim besten Willen nicht erklären, warum. Ich habe bis zum Ende des Internets nach jemandem gesucht, der dieses Problem hat, und anscheinend bin ich der Einzige. Die StartRowIndex Parameter scheint gut zu funktionieren.

Irgendwelche Ideen?

6voto

Bruno F. Punkte 61

Si SelectCountMethod nicht angegeben ist, wird die PageSize wird -1 sein.

2voto

Alfredo Punkte 21

Ich glaube, Sie verwechseln ein wenig (ich habe das hier gelesen) zwischen Seiten und Zeilen.

Die von ObjectDataSource (ODS) für das Paging verwendeten Parameter sind die Eigenschaften startRowIndex et maximumRows aber in Ihrer Funktion rufen Sie sie auf PageIndex et PageSize .

ODS zeigt Seiten an, verwendet aber Zeilennummern für die Anzeige der Seiten. Bei einer Seitengröße von zehn (Standard) ist der erste Aufruf Ihrer GetProducts() Funktion haben startRowIndex = 0 et maximumRows = 10 - d.h. bei Zeile Null beginnen und zehn Zeilen liefern.

Wenn der Benutzer Seite 2 auswählt, wird GetProducts mit startRowIndex=10 aufgerufen und maximumRows = 10 . Für Seite 3 würde dies lauten startRowIndex = 20 et maximumRows = 10

Ich schlage vor, dass Sie Ihre Parameter umbenennen und dieselben Namen verwenden - das erleichtert die Programmierung.

0voto

Erik Punkte 1

Sie sind nicht allein. Ich habe das gleiche Problem. Mein Aufbau ist ein wenig anders. In meinem Fall verwende ich ein ListView anstelle eines GridView Controls. Ich habe 2 Seiten, eine mit einem ListView und DataPager und die andere mit einem ListView und einem Custom Navigation Control (das ist im Wesentlichen das Gleiche wie der DataPager nur mit einer anderen Markup-Ausgabe). Beide Seiten verwenden die gleiche BLL-Methode und setzen die maximumRow & startRow auf die gleiche Weise. Im Grunde kopiert & eingefügt Code.

Das ListView-DataPager-Setup funktioniert gut, die Parameter sind in der BLL-Methode korrekt eingestellt. Die Seite ohne DataPager schlägt fehl. Aber der DataPager kann nicht der Grund sein. Beide (DataPager und mein benutzerdefiniertes Steuerelement) produzieren die gleichen, erwarteten Werte, die an die ObjectDataSource-Parametersammlung übergeben werden.

Das Verwirrendste ist, dass die SelectCountMethode, die nach der SelectMethode aufgerufen wird, in beiden Versionen die richtigen Parameter erhält!

Ich konnte dieses Problem umgehen, indem ich die Parameterwerte im OnSelecting-Ereignis der ObjectDataSource festgelegt habe:

protected void ObjectDataSource_MyListing_OnSelecting(object sender, ObjectDataSourceSelectingEventArgs e)
{
            e.Arguments.StartRowIndex = m_startRowIndex;
            e.Arguments.MaximumRows = m_PageSize;
}

Ich habe irgendwo gelesen, dass der Wert -1 für MaximumRows einfach "alle verbleibenden Datensätze" bedeutet. Es handelt sich also nicht um einen Fehler, sondern um einen Standardwert.

Dies ist mein erster Beitrag hier, ich hoffe, ich habe nichts falsch gemacht, da dies nicht wirklich eine Lösung ist. Auch ich will nicht zu entführen, aber ich würde jede zusätzliche Informationen zu schätzen wissen ... dieses Problem ist mir bugging.

0voto

Diese Umgehung funktioniert.

Ich war auch mit dem gleichen Problem konfrontiert.

Wenn Sie EnablePaging = "true" dann StartRowIndex wurde immer auf die Seitengröße festgelegt.

Wenn EnablePaging = "false" ist, wurde MaximumRows auf Null gesetzt.

Wenn Sie jedoch die Einstellung

e.Arguments.StartRowIndex = m_startRowIndex; 
e.Arguments.MaximumRows = m_PageSize; 

Dann funktioniert es ordnungsgemäß, aber dies ist eine Abhilfe

0voto

Joy Punkte 94

Sie müssen die SelectCountMethod-Eigenschaft im ObjectDataSource-Steuerelement festlegen und dort auch die Pagergröße und den Index einstellen, wodurch das Problem hoffentlich behoben wird.

Herzliche Grüße, Freude

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X