Provando un approccio reale con il RadioButtonList con asp.net 2.0 (beta 2), per semplicità decido di popolarlo con un file Xml. Niente di complesso, se scrivo questo codice:
<body> <form id="form1" runat="server"> <div> <asp:CheckBoxList ID="CheckBoxList1" runat="server" DataSourceID="XmlDataSource1" DataTextField="text" DataValueField="value"> </asp:CheckBoxList> <asp:XmlDataSource ID="XmlDataSource1" runat="server" DataFile="~/Data/XMLFile.xml"></asp:XmlDataSource> </form> </body>
Con questo file Xml:
<?xml version="1.0" encoding="utf-8" ?> <root> <item value="1" text="Value 1" /> <item value="2" text="Value 2" /> <item value="3" text="Value 3" /> </root>
Tutto viene visualizzato correttamente e con l'editor Visual Studio la cosa diventa una sciocchezza visto che il wizard del radiobuttonlist permette la selezione dei vari campi da visualizzare. L'output è pressappoco come questo:
Ma se la fonte dei dati Xml avesse una struttura differente da quella usata nel mio esempio perché presa da un'altra fonte di dati? Ipotizziamo di voler popolare il radiobuttonlist con questo file Xml:
<?xml version="1.0" encoding="utf-8" ?> <root> <item> <a>Value 1</a> <b>1</b> </item> <item> <a>Value 2</a> <b>2</b> </item> <item> <a>Value 3</a> <b>3</b> </item> </root>
Tutti i tentativi che ho fatto per permettere il popolamento del radiobuttonlist sono andati a vuoto. Sarò un po' tocco io, ma non sono riuscito a dare i "value" e "text" al webcontrol anche impostando xpath e altre amenità simili.
Guardando tra le proprietà e metodi dell'xmldatasource ho trovato la proprietà "TrasformFile" che accetta un file xslt. Ok, ecco una soluzione: trasformare il file precedente Xml in un formato simile al primo file Xml che ho inserito in questo blog. Ecco il codice del file Xslt:
<?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <root> <xsl:for-each select="root/item"> <xsl:element name="item"> <xsl:attribute name="value"> <xsl:value-of select="b" /> </xsl:attribute> <xsl:attribute name="text"> <xsl:value-of select="a" /> </xsl:attribute> </xsl:element> </xsl:for-each> </root> </xsl:template> </xsl:stylesheet>
Ed ecco il codice:
<body> <form id="form1" runat="server"> <div> <asp:CheckBoxList ID="CheckBoxList2" runat="server" DataSourceID="XmlDataSource2" DataTextField="text" DataValueField="value"> </asp:CheckBoxList> <asp:XmlDataSource ID="XmlDataSource2" runat="server" DataFile="~/Data/XMLFile2.xml" TransformFile="~/Data/Converti.xsl"></asp:XmlDataSource> </form> </body>
Avviato... tutto funziona. Ma una tecnica meno complessa non esiste? :)
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
- Un po' di benchmark tra Linq, Entity Framework e Nhibernate, il 12 ottobre 2008 alle 14:46
- UrlRewriting con trabocchetti vari, l'11 dicembre 2007 alle 21:00
- Windows Forms - DataGridView e validazione, il 23 settembre 2007 alle 20:08
- ControlParameter e masterpage... bug?, il 23 dicembre 2006 alle 15:58
- Se Visual Studio 2005 non accetta più la tastiera, il 16 dicembre 2006 alle 20:45
- Service Pack 1 di Visual Studio 2005, il 16 dicembre 2006 alle 20:35