none
Ordenar DropdownList vindo do XML RRS feed

  • Pergunta

  • Boa Tarde, Pessoal.

    Seguinte, tenho um DropDownList que é carregado com nomes vindo de um XML.

    Preciso ordenar ele em ordem Alfabetica, como posso fazer isso?

     

    Não consigo dar um dropdown.Sort();

     

    Muito obrigado !

    quarta-feira, 5 de outubro de 2011 17:08

Respostas

  • CONSEGUII ! Ficou perfeito !

    Meu método:

     public void OrdenarDDL(DropDownList ddl)
        {
            ArrayList textList = new ArrayList();
            ArrayList valueList = new ArrayList();
    
            foreach (ListItem li in ddl.Items)
            {
                textList.Add(li.Text);
            }
            textList.Sort();
    
            foreach (object item in textList)
            {
                string value = ddl.Items.FindByText(item.ToString()).Value;
                valueList.Add(value);
            }
            ddl.Items.Clear();
    
            for (int i = 0; i < textList.Count; i++)
            {
                ListItem objItem = new ListItem(textList[i].ToString(), valueList[i].ToString());
                ddl.Items.Insert(i, textList[i].ToString());
            }   
        }
    

     

     

    Valeu pessoal !

    • Marcado como Resposta Progamador.C sexta-feira, 7 de outubro de 2011 11:24
    sexta-feira, 7 de outubro de 2011 11:24

Todas as Respostas

  • Veja se te ajuda:

    Carregue o XML no Data View e faça o seguinte:
    
    DataView dvOptions = new DataView(DataTableWithOptions);
    dvOptions.Sort = "Description";
    
    ddlOptions.DataSource = dvOptions;
    ddlOptions.DataTextField = "Description";
    ddlOptions.DataValueField = "Id";
    ddlOptions.DataBind();
    
    



    Vinicius Nunes Macedo
    • Sugerido como Resposta Vitor Mendes quarta-feira, 5 de outubro de 2011 18:14
    • Não Sugerido como Resposta Progamador.C quinta-feira, 6 de outubro de 2011 17:36
    quarta-feira, 5 de outubro de 2011 18:07
  • Estou carregando assim meu DDL com os dados do XML:

     

    public void CarregarDDLEmail()
        {
            XmlDocument doc = new XmlDocument();
            doc.Load(Server.MapPath("~/XML/xml.xml"));
            XmlNodeList nos = doc.GetElementsByTagName("email");
            for (int i = 0; i < nos.Count; i++)
            {
                string listaEmail = nos[i].InnerText;
                ddlEmailsStop.Items.Insert(0, listaEmail);
                ddlEmailsInformation.Items.Insert(0, listaEmail);
                ddlEmailsSolution.Items.Insert(0, listaEmail);
            }
    
            XmlNodeList nosCC = doc.GetElementsByTagName("emailCC");
            for (int i = 0; i < nosCC.Count; i++)
            {
                string listaEmailCC = nosCC[i].InnerText;
                ddlEmailsStop.Items.Insert(0, listaEmailCC);
                ddlEmailsInformation.Items.Insert(0, listaEmailCC);
                ddlEmailsSolution.Items.Insert(0, listaEmailCC);
            }       
        }
    


     

    quinta-feira, 6 de outubro de 2011 11:11
  • Vou te dar uma dica, trabalhar com as classes XlmDocument ou XmlReader é legal e simples, mais depois que estudei LINQ to XML não vejo algo mais pratico e simples doque isso, utilize o namespace em seu projeto System.Xml.Linq, veja este exemplo que fiz e tente adaptar, é só adicionar o resultado da busca como DataSource do seu DropDownList:

    string xml = @"<?xml version='1.0' encoding='utf-8' ?>
        <ListaCliente>
          <Cliente Nome='Roberto' Cidade='Bahia' Idade='27'></Cliente>
          <Cliente Nome='Ingrid' Cidade='Salvador' Idade='19'></Cliente>
          <Cliente Nome='Aline' Cidade='Ilheus' Idade='39'></Cliente>
          <Cliente Nome='Julio' Cidade='Rio de Janeiro' Idade='41'></Cliente>
          <Cliente Nome='Barbaba' Cidade='Manaus' Idade='18'></Cliente>
        </ListaCliente>";
    
    //Carregando XML de um arquivo
    //var xDoc = System.Xml.Linq.XDocument.Load(@"C:\Cliente.xml");
    
    //Ou
    var xDoc = System.Xml.Linq.XDocument.Parse(xml);
    
    var resultadoNomes = (from r in xDoc.Descendants("Cliente")
                          orderby r.Attribute("Nome").Value
                          select new { Nome = (string)r.Attribute("Nome").Value }).ToList();
    
    var resultadoCidades = (from r in xDoc.Descendants("Cliente")
                            orderby r.Attribute("Cidade").Value
                            select new { Cidade = (string)r.Attribute("Cidade").Value }).ToList();
    
    var resultadoIdade = (from r in xDoc.Descendants("Cliente")
                          orderby r.Attribute("Idade").Value
                          select new { Idade = int.Parse(r.Attribute("Idade").Value) }).ToList();
    

     Um dos resultados:
     
    Vitor Mendes | Seu feedback é muito importante para todos!
    Visite o meu site: http://www.vitormendes.com.br/
    quinta-feira, 6 de outubro de 2011 13:59
  • Não tem como fazer da forma que já estou fazendo?

     

    Sem usar o LINQ?

    quinta-feira, 6 de outubro de 2011 16:10
  • Você pode uma um TransfomationFile para isso...

    Exemplo:

    Arquivo .xml:

    <?xml version='1.0' encoding='utf-8' ?>
    <ListaCliente>
      <Cliente Nome='Roberto' Cidade='Bahia' Idade='27'></Cliente>
      <Cliente Nome='Ingrid' Cidade='Salvador' Idade='19'></Cliente>
      <Cliente Nome='Aline' Cidade='Ilheus' Idade='39'></Cliente>
      <Cliente Nome='Julio' Cidade='Rio de Janeiro' Idade='41'></Cliente>
      <Cliente Nome='Barbaba' Cidade='Manaus' Idade='18'></Cliente>
    </ListaCliente>
    
    
    

    Arquivo .aspx

    <%@ Page Language="C#" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:DropDownList ID="DropDownList1" runat="server" DataSourceID="XmlDataSource1"
                DataTextField="display" DataValueField="key" />
            <asp:XmlDataSource ID="XmlDataSource1" runat="server" 
                DataFile="~/App_Data/XMLFile1.xml" 
                TransformFile="~/App_Data/Transform.xsl"/>
        </div>
        </form>
    </body>
    </html>
    
    

    Arquivo .xsl

    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
      <xsl:template match="Cliente">
        <item>
          <xsl:attribute name='display'>
            <xsl:value-of select="@Nome"/>
          </xsl:attribute>
          <xsl:attribute name='key'>
            <xsl:value-of select="@Nome"/>
          </xsl:attribute>
        </item>
      </xsl:template>
    
      <xsl:template match="ListaCliente">
        <data>
          <xsl:apply-templates select="Cliente">
            <xsl:sort select="@Nome" order="ascending"/>
          </xsl:apply-templates>
        </data>
      </xsl:template>
    </xsl:stylesheet>
    

    Qualquer duvida é so avisar....

     

     

     

    quinta-feira, 6 de outubro de 2011 17:00
    Moderador
  • Nem deu certo =/

     

    Não tem uma maneira mais simples?

     

    Olha, eu achei esse método na net:

    private void SortDDL(ref DropDownList objDDL)
            {
                    ArrayList textList = new ArrayList();
                    ArrayList valueList = new ArrayList();

                    foreach (ListItem li in objDDL.Items)
                    {
                            textList.Add(li.Text):
                    }

                    textList.Sort();

                    foreach (object item in textList)
                    {
                    string value = objDDL.Items.FindByText(item.ToString()).value;
                    valueList.Add(value);
                    }
                    objDDL.Items.Clear();
                    for (int i = 0; i< textList.Count; i++)
                    {
                            ListItem objItem = new ListItem(textList[i].ToString(), valueList[i].ToString());

                    }

     

     

     

    Ele realmente funciona, ordena bonitinho o que eu preciso, porém, quando minha página carrega, ele some com todos os items do meu Dropdown, não to entendendo direito.

     

    Eu to vendo que ele dá um dd.Clear(), mas depois ele carrega com os items ordenados, fiquei meio confuso quanto a isso..

    • Marcado como Resposta Progamador.C sexta-feira, 7 de outubro de 2011 11:23
    • Não Marcado como Resposta Progamador.C sexta-feira, 7 de outubro de 2011 11:23
    sexta-feira, 7 de outubro de 2011 11:00
  • CONSEGUII ! Ficou perfeito !

    Meu método:

     public void OrdenarDDL(DropDownList ddl)
        {
            ArrayList textList = new ArrayList();
            ArrayList valueList = new ArrayList();
    
            foreach (ListItem li in ddl.Items)
            {
                textList.Add(li.Text);
            }
            textList.Sort();
    
            foreach (object item in textList)
            {
                string value = ddl.Items.FindByText(item.ToString()).Value;
                valueList.Add(value);
            }
            ddl.Items.Clear();
    
            for (int i = 0; i < textList.Count; i++)
            {
                ListItem objItem = new ListItem(textList[i].ToString(), valueList[i].ToString());
                ddl.Items.Insert(i, textList[i].ToString());
            }   
        }
    

     

     

    Valeu pessoal !

    • Marcado como Resposta Progamador.C sexta-feira, 7 de outubro de 2011 11:24
    sexta-feira, 7 de outubro de 2011 11:24