Show value of nfe xml tags in columns of datagridview

0

I'm having a problem because I'm reading the tags from an NFe xml, but I'm not able to show in the columns of the datagridview, my code is reading the correct tags, but it does not see anything in the datagridview.

Follow the part of the xml I'm reading

-<det nItem="1">


-<prod>

<cProd>PA3003</cProd>

<cEAN/>

<xProd>OLEO ESSENCIAL DE CITRONELA</xProd>

<NCM>33012911</NCM>

<CEST>2000600</CEST>

<EXTIPI>00</EXTIPI>

<CFOP>5101</CFOP>

<uCom>KG</uCom>

<qCom>25.0000</qCom>

<vUnCom>123.900000000</vUnCom>

<vProd>3097.50</vProd>

<cEANTrib/>

<uTrib>KG</uTrib>

<qTrib>25.0000</qTrib>

<vUnTrib>123.900000000</vUnTrib>

<indTot>1</indTot>

<xPed>002497/1</xPed>

</prod>

follow my code

private void btn_xml_Click(object sender, EventArgs e)
{
    string FileName = @"C:\Xml_Entrada53- CITROLEO.xml";
    List<string> ListaItens = new List<string>();
    XmlDocument doc = new XmlDocument();
    doc.Load(FileName);
    var proditens = doc.GetElementsByTagName("prod");
    foreach (XmlElement nodo in proditens)
    {
            ListaItens.Add(nodo.GetElementsByTagName("cProd")[0].InnerText.Trim());
            ListaItens.Add(nodo.GetElementsByTagName("xProd")[0].InnerText.Trim());
            ListaItens.Add(nodo.GetElementsByTagName("qCom")[0].InnerText.Trim());
    }

    dgw_Xml.DataSource = ListaItens;

}

Follow the result

class ClasseItensXml
{
    string CodigoProduto;
    string NomeProduto;
    string QtdProduto;

    public string CodigoP
    {
        get { return CodigoProduto; }
        set { CodigoProduto = value; }
    }

    public string NomeP
    {
        get { return NomeProduto; }
        set { NomeProduto = value; }
    }
    public string QtdP
    {
        get { return QtdProduto; }
        set { QtdProduto = value; }
    }
}
    
asked by anonymous 14.07.2018 / 16:00

1 answer

0

First let's change your class, just for aesthetic reasons:

public class ClasseItensXml
{
    public string CodigoProduto {get;set;}
    public string NomeProduto {get;set;}
    public string QuantidadeComercializada {get;set;}
}

After the code, here you simply change the list to the type of the items, and then use it as source:

private void btn_xml_Click(object sender, EventArgs e)
{
    string FileName = @"C:\Xml_Entrada53- CITROLEO.xml";
    List<ClasseItensXml> ListaItens = new List<ClasseItensXml>(); //A lista é do tipo ClasseItensXml
    XmlDocument doc = new XmlDocument();
    doc.Load(FileName);
    var proditens = doc.GetElementsByTagName("prod");

    foreach (XmlElement nodo in proditens)
    {
            ListaItens.Add(
                 new ClasseItensXml()
                 { 
                      CodigoProduto = nodo.GetElementsByTagName("cProd")[0].InnerText.Trim(),
                      NomeProduto = nodo.GetElementsByTagName("xProd")[0].InnerText.Trim(),
                      QuantidadeComercializada = nodo.GetElementsByTagName("qCom")[0].InnerText.Trim()
                 });

            //Repare que cada "nodo" é um item, portanto só adiciona um ClasseItensXml na lista.
    }

    dgw_Xml.DataSource = ListaItens; //por fim, usa a lista de source

}

ps. I would use decimal in quantity, but to simplify the answer I did not change that.

    
14.07.2018 / 17:09