none
DataGridView para XML RRS feed

  • Pergunta

  • BOm dia pessoal!

    Gostaria da ajuda de voces... estou iniciando meus estudos em C# com Visual Studio 2010.

    Na minha aplicacao tenho 2 datagridview (maquinas e veiculos) com 3 colunas cada (codigo, nome, tipo) que vou preenchendo em tempo de excucao...

    qria gerar um xml com esses dados q digitei em tempo de execucao, no formato mais abaixo...

    Pesquisei e encontrei formas de fazer o inverso. Tambem achei formas de fazer com o dataset, mas pelo o q entendi ja teria q ter o conteudo todo definido... mas como o conteudo eh gerado em tempo de execucao dae nao sei...

    Obrigado!!

    <Codigos>

           <codigo>valor_digitado</codigo>
           	 <nome>nome_digitado</nome>
           	 <tipo>tipo_digitado</tipo>

           <codigo>valor_digitado</codigo>
           	 <nome>nome_digitado</nome>
           	 <tipo>tipo_digitado</tipo>

    	   <codigo>valor_digitado</codigo>
           	 <nome>nome_digitado</nome>
           	 <tipo>tipo_digitado</tipo>
    </Codigos> 
        
       </Maquinas>

       <veiculos>

    <Codigos>

           <codigo>valor_digitado</codigo>
           	 <nome>nome_digitado</nome>
           	 <tipo>tipo_digitado</tipo>

    	    <codigo>valor_digitado</codigo>
           	 <nome>nome_digitado</nome>
    
    <tipo>tipo_digitado</tipo>
    	   
    	    <codigo>valor_digitado</codigo>
           	 <nome>nome_digitado</nome>
    
    <tipo>tipo_digitado</tipo>
           
         </Codigos> 
        
       </veiculos>
    terça-feira, 12 de outubro de 2010 14:43

Respostas

  • Elder,

    O modo mais fácil de manipular XML dinâmicamente em .NET é usar o XmlDocument, confira este post:

    http://www.devx.com/tips/Tip/21168

    at.,


    Rogério de Resende Ohashi | Ohashi.NET (.NET, Security, C#, WinForms, WCF, Workflow, Azure, Windows Phone, Mono)
    quarta-feira, 20 de outubro de 2010 11:59
  • Você pode fazer o seguinte, crie classes que representem essas entidades, Maquinas e Veiculos, como as abaixo:

      [XmlRoot("Maquinas")]
      public class Maquinas : List<Dados>
      {
    
      }
    
      [XmlRoot("Veiculos")]
      public class Veiculos : List<Dados>
      {
    
      }
    
      public class Dados
      {
        [XmlElement("codigo")]
        public string Codigo { get; set; }
    
        [XmlElement("nome")]
        public string Nome { get; set; }
    
        [XmlElement("tipo")]
        public string Tipo { get; set; }
      }
    

    Repare que foram colocados alguns atributos para quando for feita a serialização ele crie de acordo com o patern que você deseja.

    Depois basta serializar essas classes para um arquivo XML, como no exemplo abaixo:

        private static void SerializeMaquinas()
        {
          Maquinas maquinas = new Maquinas();
          CarregarMaquinas(maquinas);
          using (TextWriter writer = new StreamWriter("maquinas.xml"))
          { 
            Serialize XMLSerialize = new Serialize();
            XmlSerializer xs = new XmlSerializer(typeof(Maquinas));
            XmlTextWriter xmlTextWriter = new XmlTextWriter(writer);
            xs.Serialize(xmlTextWriter, maquinas);
            writer.Close();        
          }
        }
    
        private static void CarregarMaquinas(Maquinas maquinas)
        {
          //Aqui você vai carregar das informações que estão no seu Grid
          maquinas.Add(new Dados { Codigo = "1", Nome = "Maquina 1", Tipo = "Tipo1" });
          maquinas.Add(new Dados { Codigo = "2", Nome = "Maquina 2", Tipo = "Tipo2" });
          maquinas.Add(new Dados { Codigo = "2", Nome = "Maquina 2", Tipo = "Tipo2" });
        }
    

    Esse exemplo vai gerar um arquivo no seguinte formato:

     <Maquinas xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <Dados>
       <codigo>1</codigo> 
       <nome>Maquina 1</nome> 
       <tipo>Tipo1</tipo> 
      </Dados>
      <Dados>
       <codigo>2</codigo> 
       <nome>Maquina 2</nome> 
       <tipo>Tipo2</tipo> 
      </Dados>
      <Dados>
       <codigo>2</codigo> 
       <nome>Maquina 2</nome> 
       <tipo>Tipo2</tipo> 
      </Dados>
     </Maquinas>
    

    E para completar, pode fazer a deserialização da seguinte forma:

        public Maquinas DeserializeObject(TextReader reader)
        {
          XmlSerializer xs = new XmlSerializer(typeof(Maquinas));
          return (Maquinas)xs.Deserialize(reader);
        }
    

    Espero que tenha ajudado.

     

    Abrs

    quarta-feira, 20 de outubro de 2010 17:00

Todas as Respostas

  • Elder,

    O modo mais fácil de manipular XML dinâmicamente em .NET é usar o XmlDocument, confira este post:

    http://www.devx.com/tips/Tip/21168

    at.,


    Rogério de Resende Ohashi | Ohashi.NET (.NET, Security, C#, WinForms, WCF, Workflow, Azure, Windows Phone, Mono)
    quarta-feira, 20 de outubro de 2010 11:59
  • Você pode fazer o seguinte, crie classes que representem essas entidades, Maquinas e Veiculos, como as abaixo:

      [XmlRoot("Maquinas")]
      public class Maquinas : List<Dados>
      {
    
      }
    
      [XmlRoot("Veiculos")]
      public class Veiculos : List<Dados>
      {
    
      }
    
      public class Dados
      {
        [XmlElement("codigo")]
        public string Codigo { get; set; }
    
        [XmlElement("nome")]
        public string Nome { get; set; }
    
        [XmlElement("tipo")]
        public string Tipo { get; set; }
      }
    

    Repare que foram colocados alguns atributos para quando for feita a serialização ele crie de acordo com o patern que você deseja.

    Depois basta serializar essas classes para um arquivo XML, como no exemplo abaixo:

        private static void SerializeMaquinas()
        {
          Maquinas maquinas = new Maquinas();
          CarregarMaquinas(maquinas);
          using (TextWriter writer = new StreamWriter("maquinas.xml"))
          { 
            Serialize XMLSerialize = new Serialize();
            XmlSerializer xs = new XmlSerializer(typeof(Maquinas));
            XmlTextWriter xmlTextWriter = new XmlTextWriter(writer);
            xs.Serialize(xmlTextWriter, maquinas);
            writer.Close();        
          }
        }
    
        private static void CarregarMaquinas(Maquinas maquinas)
        {
          //Aqui você vai carregar das informações que estão no seu Grid
          maquinas.Add(new Dados { Codigo = "1", Nome = "Maquina 1", Tipo = "Tipo1" });
          maquinas.Add(new Dados { Codigo = "2", Nome = "Maquina 2", Tipo = "Tipo2" });
          maquinas.Add(new Dados { Codigo = "2", Nome = "Maquina 2", Tipo = "Tipo2" });
        }
    

    Esse exemplo vai gerar um arquivo no seguinte formato:

     <Maquinas xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <Dados>
       <codigo>1</codigo> 
       <nome>Maquina 1</nome> 
       <tipo>Tipo1</tipo> 
      </Dados>
      <Dados>
       <codigo>2</codigo> 
       <nome>Maquina 2</nome> 
       <tipo>Tipo2</tipo> 
      </Dados>
      <Dados>
       <codigo>2</codigo> 
       <nome>Maquina 2</nome> 
       <tipo>Tipo2</tipo> 
      </Dados>
     </Maquinas>
    

    E para completar, pode fazer a deserialização da seguinte forma:

        public Maquinas DeserializeObject(TextReader reader)
        {
          XmlSerializer xs = new XmlSerializer(typeof(Maquinas));
          return (Maquinas)xs.Deserialize(reader);
        }
    

    Espero que tenha ajudado.

     

    Abrs

    quarta-feira, 20 de outubro de 2010 17:00