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

Kontrolka GridView w ASP.net umożliwia przejrzyste i sprecyzowane wyświetlenie danych nie tylko ze źródeł danych SQL lub za pośrednictwem rozszerzeń LINQ, ale również bezpośrednio z pliku XML zapisanego na dysku twardym. Cały proces jest prosty w obsłudze, wymaga jednak, aby plik XML był odpowiednio do tego celu przygotowany.

Jako źródła danych dla kontrolki GridView nie możemy użyć pliku XML w standardowej formie, np.:

Plik XML z wykorzystaniem atrybutów

Kontrolka GridView wymaga użycia Atrybutów dla kolejnych rekordów dataRow zamiast nowych elementów. Zmiana w kodzie programu nie jest więc duża, nadal możemy korzystać w pełni z rozszerzenia LINQ to SQL podczas generowania tak skonstruowanego pliku XML.

Jak widzimy względem standardowego kodu generowania nowego rekordu dla dokumentu XML nastąpiła podmiana elementów XElement na XAttribute dla wszystkich pól danych nowego rekordu, co skutkuje tym, że uzyskujemy plik XML w następującej postaci:

Plik XML w takiej postaci może być wyświetlony przez kontrolkę GridView, która poprawnie dopasuje wszystkie kolumny dla wymaganych danych. Najważniejsze w tym kodzie jest to, aby go nie używać do zapisu plików XML na potrzeby wyświetlenia danych w kontrolce GridView. Dlaczego więc go napisałem?? Aby pokazać wymaganą strukturę przez kontrolkę GridView oraz sposób w jaki możemy zapisywać atrybuty w dokumencie XML.

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

W jaki sposób wyświetlić więc plik XML, jego zawartość w kontrolce GridView w prawidłowy sposób? W tym celu należy wykorzystać plik XSL (XSLT), który dokonuje transformacji pliku XML.

W oknie Solution Explorer wybieramy Add New Item -> XSLT File. Musimy zamienić w nim kolejne elementy gałęzi dataRow na jej atrybuty.

Cały proces jest dosyć intuicyjny, jednak przejdę kolejno po jego najważniejszych elementach dla jasności. Za pośrednictwem polecenia w linii [6] dokonujemy wyszukania elementu w postaci gałęzi dataBase. Wewnątrz znacznika xsl:template tworzymy element wynikowy również w postaci gałęzi dataBase, która będzie zawierała wynik dopasowania do wzorca “dataRow”, które odbywa się za pośrednictwem polecenia select [8]. Znacznik xsl:apply-templates odpowiada za przejście do niższej gałęzi drzewa w przeszukiwanym dokumencie, w naszym przypadku jest to gałąź dataRow, którą zwiera plik XML.

W niższych gałęziach ponownie dokonujemy przeszukiwania z dopasowaniem dla “dataRow” [11], w wyniku którego również tworzymy nową gałąź dataRow [12]. Następnie przypisujemy jej kolejne atrybuty [13, 16, 19 itd.], na podstawie dopasowanych wartości zagnieżdżonych w gałęzi dataRow, którą zawiera przeszukiwany przez nas plik XML za pośrednictwem znacznika xsl:value-of oraz polecenia select. Tworzone atrybuty dokumentu wynikowego odpowiadają elementom i ich wartościom gałęzi dataRow pliku źródłowego XML.

Dokument przetransformowany w taki sposób ma postać identyczną jakby był on tworzony z użyciem atrybutów od podstaw.

W kontrolce XmlDataSource wskazujemy jako plik danych nasz plik XML w standardowej formie oraz plik transformujący XSLT.

Konfiguracja XmlDataSource

Konfiguracja XmlDataSource

Od tej pory nasz plik XML zapisany w standardowej architekturze jest automatycznie transformowany do odpowiedniej postaci z wykorzystaniem atrybutów przed wyświetleniem jego zawartości w kontrolce GridView. Wystarczy jedynie podłączyć utworzoną kontrolkę XmlDataSource do kontrolki GridView. Kolumny zostaną wygenerowane automatycznie.

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

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

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