Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Problem sa page-ingom

[es] :: .NET :: ASP.NET :: Problem sa page-ingom

[ Pregleda: 2473 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

toxi_programer
Nemanja Todić
Beograd

Član broj: 104396
Poruke: 464
*.adsl-a-1.sezampro.yu.

Sajt: www.articles411.com


+8 Profil

icon Problem sa page-ingom29.04.2008. u 17:27 - pre 194 meseci
Zar sledeći kod ne bi trebalo da vrati samo prva tri reda iz tabele? Kako bilo, ja dobijam kao rezultat sve redove iz tabele.
dataSrc je AccessDataSource tipa.

Code:

DataSourceSelectArguments arg = new DataSourceSelectArguments(0,3);
arg.AddSupportedCapabilities(DataSourceCapabilities.Page);

DataTable tbl = ((DataView)dataSrc.Select(arg)).ToTable();

foreach ( DataRow row in tbl.Rows)
{
    Response.Write(((int)row["KorisnikId"]).ToString() + "<br/>");
}


Dakle, ja hoću da dobijem samo prva tri reda ili npr od trećeg do šestog reda iz tabele. Napisao sam ovaj kod, ali on ne radi to što meni treba( jer vraća sve redove u tabeli), pa mi je potrebna vaša pomoć.
 
Odgovor na temu

Prokleta_Nedelja
Beograd

Član broj: 90608
Poruke: 450
91.191.24.*



+42 Profil

icon Re: Problem sa page-ingom29.04.2008. u 18:25 - pre 194 meseci
Prva tri reda mozes odabrati sa SELECT TOP 3...
medjutim ako ti treba od 3 do 6 onda nisam siguran. Mislim da access nema LIMIT komandu kao MySQL gdje bi odabir tri reda pocevsi od treceg do sestog izgledao: SELECT * FROM moja_tabela LIMIT 3,3
 
Odgovor na temu

toxi_programer
Nemanja Todić
Beograd

Član broj: 104396
Poruke: 464
*.adsl-a-1.sezampro.yu.

Sajt: www.articles411.com


+8 Profil

icon Re: Problem sa page-ingom29.04.2008. u 18:50 - pre 194 meseci
Da, kapiram ja to... Ali postoje ugrađene kontrole koje i sa access bazom omoguće pageing... Hm... Našao sam na google, lik je imao isti ovaj problem, ali ostao je bez adektvatnog odgovora.
 
Odgovor na temu

deerbeer
Beograd

Član broj: 174418
Poruke: 1189
*.adsl-3.sezampro.yu.



+395 Profil

icon Re: Problem sa page-ingom29.04.2008. u 20:35 - pre 194 meseci
Da u pravu si ...DataSourceSelectArguments je slabo dokumentovan..
Al nekad me .NET toliko razmazi da vise potrosim vremena na net-u trazeci ono sto mi treba umesto da to napravim sam ...
Napravi svoju funkciju koja bi vracala DataTable za zadane parametre (int nStartIndex,int nCount) .
Ne bi trebalo da bude tesko....
Code:

DataTable SelectPage (DataTable src ,int nStartIndex,int nCount) 
{
DataTable dt = new DataTable () ; 
if (nStartIndex != -1 &&  (nStartIndex + nCount < src.Rows.Count))
{
 for (int i = nStartIndex ; i <  nStartIndex + nCount ; i++)
  {
    .....
    ....
  }

  return dt  ; 

}

}

Viva lollapalooza
 
Odgovor na temu

toxi_programer
Nemanja Todić
Beograd

Član broj: 104396
Poruke: 464
*.adsl-a-1.sezampro.yu.

Sajt: www.articles411.com


+8 Profil

icon Re: Problem sa page-ingom29.04.2008. u 21:06 - pre 194 meseci
Da, radi to sve OK ali problem je ako u tabeli imam 5000 redova. Ja ću, i sa tvojim kodom, morati da iz baze select komandom selektujem svih pet hiljada pa tek onda da odbacim ono što mi ne treba. To mu dođe nekako neoptimizovano, pogotovo pošto se radi o veb aplikaciji, znači može za gooomilu korisnika u isto vreme da se obrađuje ovaj zahtev...

Al jbg... A izgleda da to ne može drugačije, mislim nekako preko SQL sintakse da se filtrira?


DOPUNA:
Bah, evo šta nađoh na jednom drugom sajtu:
Citat:
If the table you are paging through has one million records in it, all one million records are queried, transported to the application, and then a select few (the current page) are displayed. I'm guessing you can see where you may run into a slight performance issue with this.

Ceo artikal na adresi: http://www.dotnetjunkies.ddj.c...1E-448A-BC23-B64B871F967F.dcik

[Ovu poruku je menjao toxi_programer dana 29.04.2008. u 22:29 GMT+1]
 
Odgovor na temu

deerbeer
Beograd

Član broj: 174418
Poruke: 1189
*.adsl-1.sezampro.yu.



+395 Profil

icon Re: Problem sa page-ingom29.04.2008. u 21:38 - pre 194 meseci
Pogledaj http://msdn2.microsoft.com/en-us/library/way3dy9w.aspx

Citat:
@toxi_programer
Da, radi to sve OK ali problem je ako u tabeli imam 5000 redova. Ja ću, i sa tvojim kodom, morati da iz baze select komandom selektujem svih pet hiljada pa tek onda da odbacim ono što mi ne treba.

U svakom slucaju ovo treba da bude posao SQL servera ili access-a tj. da ti ne vrati celu bazu u DataSet :)
SQL upitom vrati neku osnovnu filtriranu tabelu (do recimo 100 rekorda) pa onda radis "select" nad tim podacima
(Ako dobijas tabelu od 5000 redova znaci da je trebas skratiti sql upitom ... )

Viva lollapalooza
 
Odgovor na temu

maksvel

Član broj: 107376
Poruke: 2417

Jabber: maksvel
Sajt: maksvel.in.rs


+161 Profil

icon Re: Problem sa page-ingom04.05.2008. u 17:20 - pre 194 meseci
U principu, Access i nije za previše konkurentnih korisnika... A SQL Server 2005 ima funkciju za to, nađoh ovo:
Custom Paging in ASP.NET 2.0 with SQL Server 2005
 
Odgovor na temu

toxi_programer
Nemanja Todić
Beograd

Član broj: 104396
Poruke: 464
*.adsl-3.sezampro.yu.

Sajt: www.articles411.com


+8 Profil

icon Re: Problem sa page-ingom04.05.2008. u 20:46 - pre 194 meseci
@maxvel
Koliko vidim, to je samo primer sa čitanje red-po-red iz tabele, ali ne i kako povući iz baze samo "od-do".


Evo, da izložim kako sa rešio problem. Jednostavnije je od ostalih rešenja na koje sam nailazio.
Prvo, da objasnim šta je šta. litDisplay je literal. Tabela "korisnici" sadrži AutoIncrement polje "KorisnikId"( koje je i primarni ključ). ID poslednje prikazanog reda se čuva u ViewState-u, a ja selektujem "TOP n" redova čiji je ID veći od onog koji je smešten u ViewState( dakle poslednje prikazan ID).

Da bih prešao na sledeći prikaz, dovoljno je da postavim npr button i pritiskom na njega će se učitati sledećih npr. 5 redova tabele.
Code:

protected void Page_Load(object sender, EventArgs e)
{
    int n = 4; //broj redova koji će biti prikazani
    if (!IsPostBack)
        ViewState.Add("KorisnikId", 0); //pamti id poslednjeg prikaza

    int kId = (int)ViewState["KorisnikId"]; //uzima vrednost poslednjeg prikaza
    //sql komanda koja selektuje n redova iz tabele počev od poslednje prikazanog
    string sqlSel = "select TOP " + n + " * from korisnici where KorisnikId > " + kId;
    //neka moja klasa koja izvraši SQL upit i vrati DataTable
    DataTable tbl = BazaPodataka.IzvrsiUpit(sqlSel); 
    litDisplay.Text = ""; // u litDisplay prikazuje rezultat
    for( int i = 0; i < n && i < tbl.Rows.Count; ++i)
    {
        litDisplay.Text += tbl.Rows[i]["ime"] + "<br/>"; //prikaži pročitan podatak
    }
    if (tbl.Rows.Count == 0) 
        litDisplay.Text += "<br/><b> kraj tabele</b>";
    else
        ViewState["KorisnikId"] = (int)tbl.Rows[tbl.Rows.Count-1]["KorisnikId"];//pamti id poslednjeg prikaza
}


Ja mislim da je ovo OK rešenje.
 
Odgovor na temu

maksvel

Član broj: 107376
Poruke: 2417

Jabber: maksvel
Sajt: maksvel.in.rs


+161 Profil

icon Re: Problem sa page-ingom04.05.2008. u 22:00 - pre 194 meseci
Ako radi, onda radi Nego, izgleda da sam gore dao pogrešan link, pravi je http://aspnet.4guysfromrolla.com/articles/031506-1.aspx
 
Odgovor na temu

[es] :: .NET :: ASP.NET :: Problem sa page-ingom

[ Pregleda: 2473 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.