Escrito em May 11th, 2009 as 12:00 am por Guilherme Bacellar

1 Comentário

Vamos ver como fazer DataBinding em um GridView no ASP.NET com XmlDataSource

Para o exemplo iremos utilizar o XML abaixo como Fonte de Dados:

<?xml version="1.0" encoding="utf-8" ?>
<Dados>
    <Usuarios>
        <Usuario ID="1" Nome="Guilherme Bacellar Moralez" Idade="26">
            <Familia>
                <Pai>Pai de Guilherme Bacellar Moralez</Pai>
                <Mae>Mãe de Guilherme Bacellar Moralez</Mae>
            </Familia>
        </Usuario>

        <Usuario ID="2" Nome="Pablo Henrique Lima Roveroni" Idade="29">
            <Familia>
                <Pai>Pai de Pablo Henrique Lima Roveroni</Pai>
                <Mae>Mãe de Pablo Henrique Lima Roveroni</Mae>
            </Familia>
        </Usuario>
    </Usuarios>
</Dados>

Em Seguida, precisamos de um Objeto XmlDataSource para que possamos utilizar o XML como DataSource em nosso Grid.

C#

//
// Carrega um Arquivo XML Contendo o XML
// para a Fonte de Dados
System.Xml.XmlDocument xmlData = new System.Xml.XmlDocument();
xmlData.Load(@"c:\tmp\DataBindingGridXML\FonteDeDados.xml");

// Cria XMLDataSource
System.Web.UI.WebControls.XmlDataSource xmlDS = new System.Web.UI.WebControls.XmlDataSource();

// Desliga o Cache do XMLDataSource
xmlDS.EnableCaching = false;

// Configura os Dados em XML para o XMLDataSource utilizando o XML que Representa os Usuários (Nó Usuarios) do nosso XML de Dados
xmlDS.Data = xmlData.SelectSingleNode("Dados/Usuarios").OuterXml;

// Realiza o Bind no Grid
this.GridView1.DataSource = xmlDS;
this.GridView1.DataBind();

VB.NET

' Carrega um Arquivo XML Contendo o XML
' para a Fonte de Dados
Dim xmlData = New System.Xml.XmlDocument()
xmlData.Load("c:\tmp\DataBindingGridXML\FonteDeDados.xml")

' Cria XMLDataSource
Dim xmlDS = New XmlDataSource()

' Desliga o Cache do XMLDataSource
xmlDS.EnableCaching = False

' Configura os Dados em XML para o XMLDataSource utilizando o XML que Representa os Usuários (Nó Usuarios) do nosso XML de Dados
xmlDS.Data = xmlData.SelectSingleNode("Dados/Usuarios").OuterXml

' Realiza o Bind no Grid
Me.GridView1.DataSource = xmlDS
Me.GridView1.DataBind()

Neste exemplo em específico utilizamos um XMLDocument carregando um Arquivo (.xml) para carregar os dados no objeto XmlDataSource. Mas, você pode simplemente passar um XML (em formato de string) na propriedade (xmlDS.Data) do objeto.

Note que desligamos o Cache XmlDataSource (xmlDS.EnableCaching = False), isso porque o XmlDataSource possui um mecanismo de cache que pessoalmente não gosto muito de utilizar, mas, é bem útil sem situações que utilizamos arquivos (.xml) que normalmente não são atualizados.

Este procedimento em sí já resolve, mas, vamos ver como utilizar o evento (RowDataBound)

C#

protected void GridView1_RowDataBound (object sender, System.Web.UI.WebControls.GridViewRowEventArgs e)
{
    if (e.Row.RowType == System.Web.UI.WebControls.DataControlRowType.DataRow)
    {
        // Cria Objetos
        System.Xml.XPath.XPathNavigator navigator;

        // Recupera o XPathNavigator com a Linha do XML que Representa a Linha Atual do Grid
        navigator = ((System.Xml.XPath.IXPathNavigable)e.Row.DataItem). CreateNavigator();

        // Recupera os Campos do XML
        int id = navigator.SelectSingleNode("@ID").ValueAsInt;
        int idade = navigator.SelectSingleNode("@Idade").ValueAsInt;
        string nome = navigator.SelectSingleNode("@Nome").Value;
        string nomeDoPai = navigator.SelectSingleNode("Familia/Pai").Value;
        string nomeDaMae = navigator.SelectSingleNode("Familia/Mae").Value;
    }
}

VB.NET

'
'
'
Protected Sub GridView1_RowDataBound (ByVal sender As System.Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound
    If (e.Row.RowType = DataControlRowType.DataRow) Then

        ' Cria Objetos
        Dim navigator As System.Xml.XPath.XPathNavigator

        ' Recupera o XPathNavigator com a Linha do XML que Representa a Linha Atual do Grid
        navigator = CType(e.Row.DataItem, System.Xml.XPath.IXPathNavigable).CreateNavigator()

        ' Recupera os Campos do XML
        Dim id As Integer = navigator.SelectSingleNode("@ID").ValueAsInt
        Dim idade As Integer = navigator.SelectSingleNode("@Idade").ValueAsInt
        Dim nome As String = navigator.SelectSingleNode("@Nome").Value
        Dim nomeDoPai As String = navigator.SelectSingleNode("Familia/Pai").Value
        Dim nomeDaMae As String = navigator.SelectSingleNode("Familia/Mae").Value

    End If

End Sub

Neste ponto, observe que em cada linha do Grid (Row) uma linha de nosso XML que representa um Usuário é atribuia à DataSouce que convenientemente convertemos em um XPathNavigator para podermos navegar pelo XML.

Bom, espero que esse Post seja útil.

Até o Próximo

Posts Relacionados:

  1. .Net Framework Inside : Comparações Avançadas em .NET (IEquatable)
  2. Tipos Nulos (Nullable Value Types)
  3. Utilizando Argumentos (args) em Console Application
  4. Manipulando Arquivos e Diretórios no .NET
, , , ,

1 Reposta to “DataBind em GridView com XML e XMLDataSource no ASP.NET”


  1. Bill

    1 year ago

    Muito bom o artigo!

    DataBinding em Grid com XML é algo de extrema importância quando se quer baixo acoplamento e alta coesão.

Deixa uma Resposta

znjdb32s6g