Το System.ComponentModel namespace του .ΝΕΤ Framework προσφέρει το DataObjectAttribute που σε συνδιασμό με το DataObejctFieldAttribute και το DataObjectMethodAttribute επιτρέπουν να "στολίσεις" κλάσεις έτσι ώστε να μπορούν να χρησιμοποιηθούν από το ObjectDataSource web control, για να "γεμίσεις" γρήγορα τα DataList, DetailsView, FormView, GridView. ListView και DataRepeater web controls, να "ενεργοποιήσεις" paging, sorting, editing, και όλα αυτά χωρίς έξτρα κώδικα για το databinding.
Πχ αν υποθέσουμε ότι ο παρακάτω κώδικας είναι μέρος ενός Data Class, που "υλοποιεί" το Repository pattern:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
public class ProductsDataSource
{
AdventureWorksLTEntities _ctx;
public ProductsDataSource()
{
}
public DataServiceCollection<Product> FetchAll()
{
_ctx = new AdventureWorksLTEntities(new Uri("http://localhost:55867/AdvWorksLTDataService.svc"));
DataServiceCollection<Product> products = new DataServiceCollection<Product>(_ctx);
products.Load(from p in _ctx.Product
select p);
return products;
}
} |
Για να χρησιμοποιήσεις την παραπάνω κλάση, θα πρέπει να γράψεις έξτρα κώδικα σε κάθε σελίδα που θέλεις να προσπελάσεις δεδομένα από την βάση και να γεμίσεις ένα control.
Αν η παραπάνω κλάση μετασχηματιστεί σε:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
[DataObject]
public class ProductsDataSource
{
AdventureWorksLTEntities _ctx;
public ProductsDataSource()
{
}
[DataObjectMethod(DataObjectMethodType.Select, true)]
public DataServiceCollection<Product> FetchAll()
{
_ctx = new AdventureWorksLTEntities(new Uri("http://localhost:55867/AdvWorksLTDataService.svc"));
DataServiceCollection<Product> products = new DataServiceCollection<Product>(_ctx);
products.Load(from p in _ctx.Product
select p);
return products;
}
} |
Τότε μπορείς να την χρησιμοποιήσεις σε συνδιασμό με το ObjectDataSource control, και να μην γράψεις καθόλου αυτό το κώδικα...
George J.