[ASP.NET] Datagrid paging met meerdere postback events

Pagina: 1
Acties:

  • stylee
  • Registratie: December 2000
  • Laatst online: 04-09-2021

stylee

blah zeg ik je

Topicstarter
Hai allemaal,

Ik zit met het volgende probleempje.

Ik heb een Webform waarop er een stel controls staan die een postback event kunnen veroorzaken, ook is er een extra javascriptje dat mijn form submit (dus in principe ook een postback), maar nu is het probleem dat ik op mijn Webform ook nog eens een Datagrid heb staan.

Ik wil graag gebruik maken van paging maar verdergaan naar pagina 2 werkt niet omdat hij elke keer dat datasource weer re-bind. De oplossing hiervoor is dus om alleen te binden als het geen postback is:

code:
1
2
if (!Page.IsPostBack)
   this.DataBind(); // DataBind() is dan een functie die een DataSet ophaalt etc


maar dit werkt niet meer als één van mn andere controls een PostBack heeft gegenereerd.

Iemand tips/ideeën over hoe dit op te lossen?

Alvast bedankt

Verwijderd

Hetzelfde probleem had ik een paar dagen geleden. Een oplossing die jij waarschijnlijk kunt gebruiken is het object dat zijn state moet houden in een session te stoppen.
Zie ook http://samples.gotdotnet.com/quickstart/aspplus, daar bij de datagrid server control hebben ze een voorbeeld waar ze dat ook op deze manier doen.

Verwijderd

ik gebruik voor paging altijd een stored procedure... zo haal je alleen wat je nog hebt... je geeft dus aan stored procedure mee welke rows je wilt hebben....

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:42
[nohtml]
stylee schreef op 19 January 2003 @ 00:45:
Hai allemaal,

Ik zit met het volgende probleempje.

Ik heb een Webform waarop er een stel controls staan die een postback event kunnen veroorzaken, ook is er een extra javascriptje dat mijn form submit (dus in principe ook een postback), maar nu is het probleem dat ik op mijn Webform ook nog eens een Datagrid heb staan.

Ik wil graag gebruik maken van paging maar verdergaan naar pagina 2 werkt niet omdat hij elke keer dat datasource weer re-bind. De oplossing hiervoor is dus om alleen te binden als het geen postback is:

code:
1
2
if (!Page.IsPostBack)
   this.DataBind(); // DataBind() is dan een functie die een DataSet ophaalt etc
Waar staat die code? Staat die in de Page_Load?
Hoe ziet de OnNewPage event eruit bij jou?

Als je nu volgende code plaatst in jouw PageIndexChanged event van die datagrid:
code:
1
2
3
4
5
6
7
8
private void DataGrid1_PageIndexChanged (object source, 
                                         DataGridPageChangedEventArgs e)
{

  DataGrid1.CurrentPageIndex = e.NewPageIndex;
  DataGrid1.DataBind();

}


Dan zou het probleem toch moeten opgelost zijn?

Verwijderd schreef op 19 januari 2003 @ 02:49:
ik gebruik voor paging altijd een stored procedure... zo haal je alleen wat je nog hebt... je geeft dus aan stored procedure mee welke rows je wilt hebben....


Doe je dat ook in .NET zo?
In .NET is het realiseren van paging nl. zeer gemakkelijk.

[ Voor 69% gewijzigd door whoami op 19-01-2003 11:47 ]

https://fgheysels.github.io/


  • stylee
  • Registratie: December 2000
  • Laatst online: 04-09-2021

stylee

blah zeg ik je

Topicstarter
whoami schreef op 19 January 2003 @ 11:22:
[nohtml]
[...]

Als je nu volgende code plaatst in jouw PageIndexChanged event van die datagrid:
code:
1
2
3
4
5
6
7
8
private void DataGrid1_PageIndexChanged (object source, 
                                         DataGridPageChangedEventArgs e)
{

  DataGrid1.CurrentPageIndex = e.NewPageIndex;
  DataGrid1.DataBind();

}


Dan zou het probleem toch moeten opgelost zijn?
Ik kom inderdaad iets verder :)

Maar als ik nu één pagina verder ga krijg ik helemaal niks te zien )datagrid is leeg en de vorige volgende links zijn ook niet zichtbaar).

Maar mij opzet is eigenlijk als volgt: ik heb een functie BindGrid die er ongeveer als volgt uitziet:

code:
1
2
3
4
5
6
7
8
9
SqlCommand cmd = new SqlCommand("sp_bla", m_sqlConn);
cmd.CommandType = CommandType.StoredProcedure;

SqlDataAdapter daTransactions = new SqlDataAdapter (cmd);
DataSet dsTransactions = new DataSet();
daTransactions.Fill (dsTransactions);

dbgTransacties.DataSource = dsTransactions;
dbgTransacties.DataBind();


In mijn Page_Load event doe ik dus:

code:
1
2
if (!Page.IsPostBack)
    this.BindGrid();


En tenslotte zoals Whoami aanraadde in mijn PageIndexChanged event:

code:
1
2
dbgTransacties.CurrentPageIndex = e.NewPageIndex;
dbgTransacties.DataBind();


Zou het ermee te maken kunnen hebben dat de dataset niet meer geldig is na een postback of handelt ASP.NET het cachen hiervan af?

Alvast bedankt!

[ Voor 3% gewijzigd door stylee op 19-01-2003 19:34 ]


Verwijderd

whoami schreef op 19 January 2003 @ 11:22:
[...]


Doe je dat ook in .NET zo?
In .NET is het realiseren van paging nl. zeer gemakkelijk.
Ja anders haal je iedere keer alle rows... terwijl je er maar 10 p/pagina ofzo nodig hebt

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:42
Verwijderd schreef op 20 januari 2003 @ 00:35:
[...]


Ja anders haal je iedere keer alle rows... terwijl je er maar 10 p/pagina ofzo nodig hebt


Maar misschien wordt slechts het aantal dat je nodig hebt gefetched....
Nouja, ik denk dat het qua performance wel meevalt als je in een keer alle rows ophaalt.
Op jouw manier zal je iedere keer je een andere page bekijkt een nieuwe query moeten lanceren, wat ook vertragend werkt.
Op de andere manier hoef je slechts 1x een query te doen, 1x met de databank connecteren en alle rijen in een DataSet in te laden.

https://fgheysels.github.io/


  • whoami
  • Registratie: December 2000
  • Laatst online: 22:42
stylee schreef op 19 January 2003 @ 19:33:
[...]


Ik kom inderdaad iets verder :)

Maar als ik nu één pagina verder ga krijg ik helemaal niks te zien )datagrid is leeg en de vorige volgende links zijn ook niet zichtbaar).


Doe eens in de PageIndexChanged event-handler:
code:
1
2
dbgTransactions.CurrentPageIndex = e.NewPageIndex;
this.BindGrid();  //<<-- dbgTransactions.Databind() dus door deze regel vervangen.

https://fgheysels.github.io/


  • stylee
  • Registratie: December 2000
  • Laatst online: 04-09-2021

stylee

blah zeg ik je

Topicstarter
Nope werkt ook niet, waar kan het nou aanliggen (alhoewel hij nu niet -niks- meer weergeeft maar gewoon pagina 1) ;(

Ik ga eens eventjes proberen de datagrid uit de rest van de pagina te trekken en kijken of het uberhaupt wel werkt :)

[ Voor 17% gewijzigd door stylee op 20-01-2003 13:33 . Reden: blaat ]

Pagina: 1