Tales from under the Mountain

ASP.NET Dynamic Data 3/n – korišćenje u kontrolama

U prošlom postu je bilo reči o tome kako se Dynamic Data tehnologija može izmeniti, odnosno koje mogućnosti izmene OOB funkcionalnosti možemo da nađemo. Danas ću samo kratko proći kroz to kako se Dynamic Data može koristiti na postojećem sajtu, u postojećim “data aware” kontrolama kao što su GridView ili ListView. Naravno, negde usput ću objasniti i zašto bi neko želeo da uradi nešto slično.

Trenutno stanje u ASP.NET svetu

Trenutno, u ASP.NET svetu je stanje kontrola koje rade veliku većinu posla sa podacima veoma poznato i utemeljeno. Ukoliko želimo da imamo tabelarni prikaz podataka, stavićemo GridView, koji dolazi sa još nekoliko “sitnica”, kao što je automatsko parcelisanje podataka (popularni paging). ListView, nova kontrola u ASP.NET 3.5 ediciji, nam daje veću kontrolu nad HTML-om koji generišemo, ali je proces rada sa njom isti kao i sa drugim kontrolama. Ukoliko bismo posmatrali kod, onda bi to bilo:

 

   1: public void Page_Load(object sender, EventArgs e){
   2:     if (!Page.IsPostback){
   3:         // konekcija, SQL komanda i sl. namerno izostavljeno
   4:         SqlDataReader reader = command.ExecuteReader();
   5:         GridView1.DataSource = reader;
   6:         GridView1.DataBind();
   7:     }
   8: }

Ukoliko bismo posmatrali deklarativno, onda bi kod izgledao nekako ovako:

   1: <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
   2:     ConnectionString="<%$ ConnectionStrings:AllThingsDemoConnectionString %>" 
   3:     SelectCommand="SELECT * FROM [Characters]"></asp:SqlDataSource>
   4: <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
   5:     DataKeyNames="ID" DataSourceID="SqlDataSource1">
   6:     <Columns>
   7:         <asp:BoundField DataField="ID" HeaderText="ID" InsertVisible="False" 
   8:             ReadOnly="True" SortExpression="ID" />
   9:         <asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" />
  10:         <asp:BoundField DataField="Age" HeaderText="Age" SortExpression="Age" />
  11:         <asp:BoundField DataField="Rank" HeaderText="Rank" SortExpression="Rank" />
  12:         <asp:BoundField DataField="Service" HeaderText="Service" 
  13:             SortExpression="Service" />
  14:         <asp:BoundField DataField="vID" HeaderText="vID" SortExpression="vID" />
  15:         <asp:BoundField DataField="aID" HeaderText="aID" SortExpression="aID" />
  16:     </Columns>
  17: </asp:GridView>

Dakle, prvo odredimo SqlDataSource i podredimo koju komandu želimo da koristimo, zatim prevučemo GridView na stranu i povežemo ta dva…presto!, imamo tabelu sa podacima koja nam daje još neke pogodnosti kao što je gore navedeno.

Ono što nam ostaje kao problem, međutim, jeste što imamo ograničenu kontrolu nad tim poljima, kaok ona izgledaju, koju logiku imaju itd. Ako želimo da kontrolišemo prikaz, onda moramo da računamo na “petljanje” sa ListView kontrolom, što nije teško, naravno, ali onda bismo morali da sredimo nekako da ceo svoj sadržaj prikazuje u tabelama. S druge strane, isto tako, ukoliko bismo želeli da izmenimo definiciju kako nam se vide polja, kako izgledaju i sl., morali bismo da menjamo u svakom trenutku.

Slično je i sa ostalim databound kontrolama, kao što je ListView, recimo.

Enter Sandman, odnosno DynamicData

Ukoliko bih želeo da napravim malo lakše održiv GridView, mogao bih da iskoristim DynamicData <asp:DynamicField /> kontrolu za to.

Prva promena je, naravno, data source. Ako se podsetimo kako Dynamic Data radi, on ne radi direktno sa bazm već koristi ili Entity Framework objekte ili Linq To SQL objekte. Stoga moram da promenim data source iz gornjeg koda u LinqDataSource. Kada sam to jednom promenio, i naravno vezao GridView za bnovi DataSource element, potrebno je sve <asp:BoundField> kontrole promenim u <asp:DynamicField> kontrole. Sintaksa između njih je veoma slična, osim što mogu da izostavim SortExpression i HeaderText atribute. Kada jednom sve kolone koje želim, i koje sam odredio da su mi potrebne i vidljive, postavim na novi GridView, imam dinamički GridView koji je svestan modela, što je jedna prednost, i koje mogu da menjam centralno.

Sledeći put

Hteo sam da napišem ovaj blog post čisto da bih pokrio još jednu upotrebu Dynamic Data kontrola. Sledeći put ću pisati detaljnije o tome kako da koristite partial klase da biste na već postojeći model (vašeg postojećeg sajta) dodali podršku za Dynamic Data kontrole i tako iskoristili sve što one nude.

Out.

B.D.

Leave a Comment

(required) 

(required) 

(optional)

(required) 

Are you a human?