A ListView kétszer mondja. A ListView kétszer mondja.

Az ASP.NET ListView vezérlő sajnos a csillagok bizonyos együttállása esetén kétszer fordul az adatbázishoz. Látszólag nincs semmi extra a dologban, mégis SQL Profilerrel megnézve tisztán látszik, hogy a kapcsolt SqlDataSource SelectCommand utasítása kétszer fut be az adatbázis szerverbe.

Szerencsére ez nem mindig fordul elő, akkor azonban biztosan, ha a ListViewt beágyazzuk egy Web User Controlba (ascx), majd az beletesszük egy adatkötött vezérlőbe, például egy FormView-ba. Tehát a szerencsétlen csillagállás:

Page –> FormView –> FormView.ItemTemplate –> Web User Control –> ListView

A problémát az okozza, hogy a ListView inicializálásakor is történik egy adatkötés és a FormView is meghívja rajta a DataBind metódust. Sajnos nem ez az egyetlen adatkötési gond a ListView-val, kész csoda, hogy nem száll el StackOverflowExceptionnel.

Megoldás

Aki teljesen biztos magában, megoldhatja a fenti problémát azzal, hogy a FormViewtól érkező DataBindot nem engedi lefolyni a ListViewra, lehet például ezt írni a Web User Controlba:

  public override void DataBind()
  {
    // Kikommentezve: base.DataBind();
  }

Aki kevésbé merész, vagy szüksége van az ASCX DataBind metódusára, az keresztbetehet az Initben lezajló adatkötésnek azzal, hogy csak később, a Page_Loadban állítja be a ListView adatforrását, például így:

  protected void Page_Load( object sender, EventArgs e )
  {
    this.ListView1.DataSource = this.SqlDataSource1;
  }

Egyelőre úgy tűnik, hogy a probléma csak a ListView vezérlőt érinti, a Repeaterrel nincs gond.


zip ListViewDataBindingBugSample.zip (5 kB)


Balássy György (MS RD, ASP.NET MVP, MCTS)

Balássy György (MS RD, ASP.NET MVP, MCTS) Villamosmérnök, a BME Automatizálási és Alkalmazott Informatikai Tanszékén webportálok fejlesztését oktatja. 2000 óta foglalkozik a Microsoft .NET platformjával, melynek meghonosításában jelentős szerepet vállalt előadóként, konzulensként és A .NET Framework és programozása című könyv társszerzőjeként. Az MSDN Kompetencia Központon belül a Portál Technológiák Csoport vezetője, szakterülete web alapú rendszerek fejlesztése és üzemeltetése. 2004-ben Magyarországon elsőként kapta meg a Most Valuable Professional címet, majd 2005 óta a Microsoft magyarországi regionális igazgatója. Publikációi a Technet Magazinban, az MSDN Kompetencia Központ honlapján és szakmai blogjában olvashatóak.

2009.06.16. 13:57:43 | Permalink | Hozzászólások: 0 | Tárgyszavak: , ,




Írja meg Ön is véleményét!


Hozzászólásokat csak regisztrált, bejelentkezett felhasználóktól tudunk elfogadni!

Hozzászólások