Często zachodzi potrzeba wyświetlenia danych pobranych z WCF Data Service w DataGridView. O ile wyświetlanie pól typów podstawowych nie stanowi żadnego problemu i dzieje się to automatycznie po przypisaniu DataSource do kontrolki DataGridView, o tyle jeśli pobieramy złożoną encję, która zawiera relację, trzeba pamiętać o kilku dodatkowych rzeczach.
Przede wszystkim należy pamiętać o zapytaniu uwzględniającym relacje danej encji. W praktyce sprowadza się to do użycia metody Extend w zapytaniu:
// ent - proxy do WCF Data Service List<User> users = ent.Users.Expand("Company").ToList();
Drugą istotną sprawą jest formatowanie tego, co ma wyświetlić się w kolumnie dla pola będącego relacją. Aby zamiast domyślnie wyświetlanej nazwy klasy przypisać własną wartość, należy utworzyć klasę częściową dla danej encji oraz nadpisac jej metodę ToString().
Kontynuując powyższy przykład, tworzymy klasę częściową Company i nadpisujemy jej metodę ToString():
public partial class Company { public override string ToString() { return this.CompanyName; } }
Po wykonaniu powyższych zabiegów, wystarczy proste przypisanie:
// dgvUsers - nasz DataGridView dgvUsers.AutoGenerateColumns = true; dgvUsers.DataSource = users;
…aby wyświetlić tabelę Users z uwzględnieniem relacji do tabeli Company, z własnym określeniem, co ma się w polu Company wyświetlać.
Oczywiście osobnym problemem jest fakt niskiej wydajności Expand (z racji łączenia po stronie klienta, a nie bazy danych), ale to temat na inny wpis.
luktom.net paź 21 , 2010 at 17:11 /
Nice. Greetings from the Speedy DNS.