aus T-SQL XML RAW eine Datasource für den asp:repeater erzeugen

Inhaltsverzeichnis

Im Rahmen unseres Entwicklungs-Mandats für einen mittelständisches Systemhaus mit eigenem Webshop-Produkt, haben wir uns intensiv mit dem repeater-Control von ASP.net beschäftigen dürfen.

Die Herausforderung bestand in einem geschachtelten Repeater. Das klassische Problem lautete: Angebote mit den jeweiligen Angebotspositionen darzustellen. Dazu haben wir die XML-Funktion von T-SQL (SQL Server) genutzt. Die notwendigen Positionsdaten werden als Spalte in dem Angebot, formatiert als RAW-XML, aus der Datenbank geholt:

SELECT 
 OfferPos_P.s_PosNo OfferPos_PosNo,
 OfferPos_P.s_ItemDesc1 OfferPos_ItemDesc1,
 OfferPos_P.N_PACKQUANTITY OfferPos_PackQuantity
FROM 
 sao.OFFERPOS_P with (Nolock)
 WHERE
 OFFERPOS_P.dt_deleted IS NULL
 AND OFFERPOS_P.I_OFFER_P = @nOfferID
FOR XML RAW

Innerhalb des 1. Repeater beinhaltet dann diese Spalte die passenden Positions-Daten. Dieses XML wird dann mit einer kleinen Funktion in eine IEnumerable-Datasource umgewandelt:

public IEnumerable<offerPos> CreateOfferPosDataSource(object xmlData)
 {
 XDocument doc = XDocument.Parse($"<?xml version=\"1.0\"?>{xmlData.ToString()}");
 IEnumerable<offerPos> result = from c in doc.Descendants("row")
 select new offerPos()
 {
 posNo = (string)c.Attribute("OfferPos_PosNo").Value,
 itemDesc1 = (string)c.Attribute("OfferPos_ItemDesc1").Value,
 packQuantity = (decimal)c.Attribute("OfferPos_PackQuantity")
 };
 return result;
 }

Am Ende kann dann diese Datasource für den zweiten Repeater genutzt werden.

<asp:Repeater runat="server" DataSource='<%# CreateOfferPosDataSource(Eval("offerpos_xml")) %>'>
 <ul>
 <ItemTemplate>
 <li><%# Eval("posNo") %>: <%# Eval("itemDesc1") %></li>
 </ul>
 </ItemTemplate>
 
 </asp:Repeater>

Cool oder?

weitere insights

3 Things Agile Businesses Do That Set Them Apart

Over the last few years, businesses have faced extraordinary disruptions, forcing many to alter what they previously considered established and effective business practices in order to meet shifting market, consumer, and employee demands. It required them to let go of their predictable, safe models and lean into the unknown. Though uncomfortable, these businesses learned that agility—the ability to quickly adapt—is both a core business competency and a state of mind…. …

Read more >