Slazem se. Onda bi neka medju-klasa bilo solidno resenje. Znaci sve podatke dovuces preko nekog data access objekta, zatim ih uporedis i odstranis redove koji ti ne trebaju i na tu metodu nakacis ObjectDataSource.
Recimo, imas data access klasu koja ima sledeci metod:
public List<NekiEntitet> GetAll()
{
// uzmes podatke iz bace preko data readera ili sl. i vratis listu
}
u nekoj medju klasi napravis metodu npr, ovakvu:
public List<NekiEntitet> GetFilteredItems()
{
// filtriras podatke, recimo uporedjujes duplikate. ako koristis List<T>, mozes to da uradis sa Find ili FindAll
}
(Ako ne zelis ovoliko raslojavanje ovo sve moze da uradi jedna klasa i jedan metod.) Na klijentu stavis ObjectDataSource, i uradis ovako nekako:
<asp:ObjectDataSource ID="odsNekoIme" runat="server" TypeName="NekiEntitet" DataObjectTypeName="NekaKlasa"
SelectMethod="GetFilteredItems" />
I na kraju, gridu zadas DataSourceID="odsNekoIme". To bi trebalo da resi problem. Ako ne koristis List<T>, mozes to da uradisi preko dataseta ili na bilo koji drugi nacin. Ja cesto upotrebljavam List<T> pa sam zato stavio to kao primer. Sustina ovde je da ces stranicu malo menjati, samo umesto SqlDataSource stavljas ObjectDataSource, koji ce umesto baze direktno da gadja klasu, a ta klasa bazu. Znaci imaces malo raslojavanja ali je bitno da ne menjas ni klijenta ni bazu, vec samo "umeces" u stvari jedan filter.
Grid vezuje sve podatke koji su dovuceni sa servera i radi klijentski paging, tako da ces u svakom momentu imati celu listu, osim ukoliko ne radis paging u bazi. Ukoliko se opredelis za ovakav pristup, mozes da pogledas treci primer u demo kodu sa MSDN day-a, upravo je ovo odradjeno + stavio sam i paging u bazi. http://msforge.net/blogs/janko/archive/2008/05/29/demo-kod-i-slajdovi-sa-predavanja-quot-asp-net-primeri-za-postizanje-boljeg-korisni-kog-iskustva-quot.aspx
Janko Jovanovic
Software devloper, designer and artist
Blogs: Janko at Warp Speed, Morning Break
Gallery: http://gallery.dzovan.com