RadioButtonList popolato con l'XmlDataSource

di Andrea Zani, in .NET2,

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? :)

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Nella stessa categoria
I più letti del mese