none
Ler XML em combobox RRS feed

  • Pergunta

  • Olá

     

    vou exemplificar o que preciso fazer

    tenho um arquivo em xml que contem os campos em seguintes campos em contato :  nome, endereço telefone e rg

    adiciono uma combobox no meu projeto e 3 textbox

    quero que na combobox, fique armazenado todos os campos nome

    e quando selecionar algum nome na combobox as informações deste nome (endereço, telefone e rg)

    sejam preechidos nas textbox.

     

    como consigo realizar este procedimento com um xml ?

    obrigado

     

     

     

     

    quinta-feira, 23 de setembro de 2010 18:38

Respostas

  • Bruno,

    Você pode usar o XMLDocument para ler o XML:

    http://msdn.microsoft.com/en-us/library/system.xml.xmldocument%28VS.71%29.aspx

    Pode também ler o XML para um DataSet:

    http://msdn.microsoft.com/en-us/library/fx29c3yd%28VS.71%29.aspx

    A partir dai você pode ligar o DataSource, DisplayMember e ValueMember do ComboBox e Bindar os TextBox no DataSet.

    At.,


    Rogério de Resende Ohashi | Ohashi.NET (.NET, Security, C#, WinForms, WCF, Workflow, Azure, Windows Phone, Mono)
    • Sugerido como Resposta AndreAlvesLimaModerator quinta-feira, 23 de setembro de 2010 19:21
    • Marcado como Resposta Bruno Gaiola quinta-feira, 23 de setembro de 2010 20:16
    • Não Marcado como Resposta Bruno Gaiola quinta-feira, 23 de setembro de 2010 20:16
    • Marcado como Resposta Bruno Gaiola quinta-feira, 23 de setembro de 2010 20:16
    • Não Marcado como Resposta Bruno Gaiola quinta-feira, 23 de setembro de 2010 20:34
    • Marcado como Resposta Bruno Gaiola quinta-feira, 23 de setembro de 2010 20:34
    quinta-feira, 23 de setembro de 2010 18:57
    Moderador

Todas as Respostas

  • Bruno,

    Você pode usar o XMLDocument para ler o XML:

    http://msdn.microsoft.com/en-us/library/system.xml.xmldocument%28VS.71%29.aspx

    Pode também ler o XML para um DataSet:

    http://msdn.microsoft.com/en-us/library/fx29c3yd%28VS.71%29.aspx

    A partir dai você pode ligar o DataSource, DisplayMember e ValueMember do ComboBox e Bindar os TextBox no DataSet.

    At.,


    Rogério de Resende Ohashi | Ohashi.NET (.NET, Security, C#, WinForms, WCF, Workflow, Azure, Windows Phone, Mono)
    • Sugerido como Resposta AndreAlvesLimaModerator quinta-feira, 23 de setembro de 2010 19:21
    • Marcado como Resposta Bruno Gaiola quinta-feira, 23 de setembro de 2010 20:16
    • Não Marcado como Resposta Bruno Gaiola quinta-feira, 23 de setembro de 2010 20:16
    • Marcado como Resposta Bruno Gaiola quinta-feira, 23 de setembro de 2010 20:16
    • Não Marcado como Resposta Bruno Gaiola quinta-feira, 23 de setembro de 2010 20:34
    • Marcado como Resposta Bruno Gaiola quinta-feira, 23 de setembro de 2010 20:34
    quinta-feira, 23 de setembro de 2010 18:57
    Moderador
  • Sim, até ai tudo bem

    a minha duvida neste caso é com relação a fazer passar as informações para as textbox quando eu alterar o nome da combobox

     

       Sub carregaxml()
            Dim doc As New XmlDocument
            Try
                doc.Load("contatos.xml")
            Catch ex As Exception
                MsgBox("Erro ao ler arquivo XML.")
                Exit Sub
            End Try
            Dim nodes As XmlNodeList = doc.SelectNodes("Agenda/contato")


            For Each element As XmlElement In nodes

                Dim nome As String = element.SelectSingleNode("nome").InnerText
                ComboBox1.Items.Add(nome)
              
            Next
            ComboBox1.SelectedIndex = 0
        End Sub

     

    desta forma eu escrevo no combo

    agora que carregar as informaçoes do nome selecionado na combo

    como posso fazer isso ?

    quinta-feira, 23 de setembro de 2010 20:13
  • Bruno,

    Você pode acessar os nós pelo índice do combobox.

    Então no SelectedIndexChanged do ComboBox você pega o item filho do doc pelo índice selecionado:

    doc[ComboBox1.SelectedIndex].SelectSingleNode("atributo").InnertText

    at.,


    Rogério de Resende Ohashi | Ohashi.NET (.NET, Security, C#, WinForms, WCF, Workflow, Azure, Windows Phone, Mono)
    quinta-feira, 23 de setembro de 2010 20:17
    Moderador
  • entendi,

    acho que estou com um probleminha na sintaxe

     

     Dim telefone As String = doc(ComboBox1.SelectedIndex).SelectSingleNode("telefone").InnerText

     

    "Referência de objeto não definida para uma instância de um objeto."

    quinta-feira, 23 de setembro de 2010 20:27
  • Talvez seja porque você está criando a variável dos dentro do método carregaxml. Tenta colocar ela como global, de fora do método.

    Bruno Ferreira de Souza
    Analista Desenvolvedor .NET
    MCP - Windows Form
    quinta-feira, 23 de setembro de 2010 22:58
  • não, creio que nao seja este o caso

    ja fiz dessa forma e ocorre a mesma coisa

    da o erro ao compilar

    quinta-feira, 23 de setembro de 2010 23:53
  • É porque você tem que dar o selectNodes novamente no doc para que ele carregue os elementos.

    Tenta Assim:

    doc.SelectNodes("Agenda/contato").Item(ComboBox1.SelectedIndex).SelectSingleNode("telefone").InnerText



    Bruno Ferreira de Souza
    Analista Desenvolvedor .NET
    MCP - Windows Form
    • Editado Bruno Maestro sexta-feira, 24 de setembro de 2010 00:19
    sexta-feira, 24 de setembro de 2010 00:05
  • o resultado foi o mesmo
    sexta-feira, 24 de setembro de 2010 00:11
  • Passa seu XML

    Bruno Ferreira de Souza
    Analista Desenvolvedor .NET
    MCP - Windows Form
    sexta-feira, 24 de setembro de 2010 00:12
  •   <?xml version="1.0" encoding="us-ascii" ?>
    - <Agenda>
    - <contato>
      <nome>bruno</nome>
      <telefone>123167999</telefone>
      </contato>
    - <contato>
      <nome>teste</nome>
      <telefone>123456</telefone>
      </contato>
      </Agenda>


    é so isso 

    o nome do arquivo é contatos
    sexta-feira, 24 de setembro de 2010 00:16
  • Bruno, se você colocou a variável doc como Global, o código abaixo vai funcionar.

    doc.SelectNodes("Agenda/contato").Item(ComboBox1.SelectedIndex).SelectSingleNode("telefone").InnerText

    com o XML nesse formato

    <?xml version="1.0"?>
    <Agenda>
      <contato>
        <telefone>123456789</telefone>
        <nome>Bruno</nome>
        <sobrenome>Maestro</sobrenome>
      </contato>
    </Agenda>

    Cria outro tópico, porque como já for resolvido esse na busca fica um pouco perdido.


    Bruno Ferreira de Souza
    Analista Desenvolvedor .NET
    MCP - Windows Form
    sexta-feira, 24 de setembro de 2010 00:17