Obiekt XML jako źródło danych dla kontrolki GridView w ASP.net

W kontrolce GridView w ASP.net często chcemy wyświetlić dane z dokumentu XML, jednak niekoniecznie musi być to fizycznie zapisany plik XML na dysku twardym lub nawet zależy nam, aby był to obiekt XML zapisany w pamięci podręcznej. Rozwiązanie tego problemu jest uniwersalne zarówno dla dokumentów XML w postaci obiektów zapisanych w pamięci podręcznej jak i plików XML zapisanych na dysku twardym.

W naszym przykładzie użyjemy standardowej struktury pliku XML, w której korzystamy z podrzędnych elementów poszczególnych gałęzi rekordów danych.

W poprzednim kursie Plik XML jako źródło danych dla kontrolki GridView w ASP.net, aby wyświetlić dokument XML w kontrolce GridView, musieliśmy skorzystać z kontrolki XmlDataSource, wykorzystać dokument transformujący XSLT lub skorzystać bezpośrednio z dokumentu XML zapisanego przy użyciu atrybutów dla kolejnych rekordów danych.

Obiekt XML jako źródło danych dla kontrolki GridView

W jaki sposób sprawić, aby obiekt XML klasy XmlDocument mógł być wyświetlony w kontrolce GridView? Należy w tym celu wykorzystać obiekt klasy DataSet, który umożliwia odczyt obiektu klasy XmlDocument, a równocześnie daje możliwość bezpośredniego przypisania do obiektu DataSource kontrolki GridView.

Plik XML jako źródło danych dla kontrolki GridView bez konieczności użycia pliku transformującego XSLT

Aby na starcie aplikacji załadować plik XML do kontrolki GridView najwygodniej jest skorzystać ze zdarzenia PreRender kontrolki GridView.

Odczyt pliku XML z dysku twardego do obiektu klasy XmlDocument odbywa się w standardowy sposób [3, 4, 5] omówiony już w poprzednich kursach.

Utworzony obiekt klasy DataSet [7] pozwala na skorzystanie z metody ReadXml [8], która korzystając z atrybutu w postaci obiektu StringReader umożliwia odczyt właściwości OuterXml obiektu klasy XmlDocument.

Obiekt klasy DataSet możemy przypisać bezpośrednio do właściwości DataSource kontrolki GridView [11] bez konieczności transformowania danych przy użyciu pliku transformującego XSLT.

Korzystamy ze zdarzenia konkretnej kontrolki, dlatego możemy odwołać się do niej dzięki parametrowi sender [10].

Jest to wygodny sposób na odczyt pliku XML i załadowanie jego zawartości do kontrolki GridView, który eliminuje konieczność używania plików transformujących XSLT.

Obiekt XML – odczyt bezpośredni

W powyższym przykładzie widzimy, że pomimo odczytu dokumentu XML z dysku twardego, jego załadowanie do kontrolki GridView odbywa się przy użyciu obiektu klasy XmlDocument.

W taki sam sposób możemy postąpić dodając nowy rekord danych do dokumentu XML lub tworząc nowy dokument XML oraz wyświetlić jego zawartość w kontrolce GridView bezpośrednio z obiektu XML, przed zapisaniem go na dysku twardym.

Obiekt XML korzysta z obiektów klasy DataSet, odbywa się to w identyczny sposób, jak podczas ładowania pliku XML z dysku. Należy pamiętać, aby nasz obiekt XML należał do klasy XmlDocument, a nie XDocument.

Jak widzimy, obiekt klasy DataSet umożliwia wyświetlanie danych pochodzących z dokumentów XML niezależnie od tego czy mamy do czynienia z plikiem XML, czy jest to obiekt XML przechowywany w pamięci. Korzystając z tego sposobu nie musimy martwić się o generowanie plików XSLT oraz dbać o źródła danych dla GridView. Musimy pamiętać, że często generujemy w pamięci obiekt XML i nie chcemy zapisywać go na dysku twardym, ponieważ jest to zbędne i powodowałoby opóźnienia w funkcjonowaniu aplikacji. Jest to niezwykle przydatne, kiedy obiekt XML służy nam jako medium transportujące dane pomiędzy aplikacjami lub kiedy dokument XML spełnia rolę bazy konfiguracyjnej naszej aplikacji albo niewielkiego obiektu tymczasowego.

Przykładowy projekt znajduje się pod linkiem: Obiekt XML w DataSource dla kontrolki GridView w ASP.net

Menu LeftMenu, login: admin, hasło: haselko

Loading Disqus Comments ...
Loading Facebook Comments ...