none
Preencher combobox RRS feed

  • Pergunta

  • Preciso fazer um métod genérico para preencher alguns combobox, que nesse projeto, todos eles vêm damesma tabela, Então ficou mais fácil. No método eu gostaria de passar esses parametros:

    public void enchecombo(Comobobox cb)
    {
       Meu select....
       Meu while
         cb.Add(meu_campo);
    }....

    Acontece que o tipo Combobox não existe. Como eu faço(não é código, mas qual using eu uso. Na página aspx está assim o combobox:
    <asp:DropDownList runat="server" ID="cboEmissor" style="font-famiuly:Verdana,font-size=12px" width="100%">
    <asp:ListItem Text="TODOS" Value="00" />
    <asp:ListItem Text="BANCO A" Value="01" />
    <asp:ListItem Text="BANCO B" Value="02" />
    ......
    </asp:DropDownList>

    É essa combo que eu ieri encher. Meu problema não está no código,mas sim como declarar isso em meu CodeBehind

    quarta-feira, 9 de maio de 2012 20:28

Respostas

  • Faça assim

    dl.DataTextField  = "EMI_C_NOME";

    dl.DataValueField = "EMI_N_CODIGO";


    Bruno Viegas | Desenvolvedor Web | Desenvolvedor Dynamics CRM

    • Marcado como Resposta pnet quarta-feira, 9 de maio de 2012 22:58
    quarta-feira, 9 de maio de 2012 21:19

Todas as Respostas

  • Pnet,

    A class que vc tem que usar é a ListItem e não Combobox.

    Qualquer duvida é só chamar


    Bruno Viegas | Desenvolvedor Web | Desenvolvedor Dynamics CRM

    quarta-feira, 9 de maio de 2012 20:45
  • ComboBox é em WIndows Forms, na Web o controle é o DropDownList.

    using System.Web.UI.WebControls

    Espero ter ajudado, abraços!


    thiagokoelho

    quarta-feira, 9 de maio de 2012 20:45
  • Em realidade é um dropdownlist. Bem, consegui montar o método, mas na combo aparece apenas isso:

    System.Data.Common.DataRecordInternal

    O código que eu fiz foi o abaixo:

    public Boolean Execute(DropDownList dl){
    ........
    OracleDataReader dr = comando.ExecuteReader();
    if(dr.HasRows)
    {
      while(dr.Read()
      {
        string nome = dr["EMI_C_NOME"].ToString();
        dl.DataSource = dr;
        dl.DataBind();
      }
    }

    quarta-feira, 9 de maio de 2012 20:51
  • Falta você setar duas propriedades

    //Esse "campo" é a coluna do BD que irá aparecer
    dl.DataTextField = "Campo"
    //Coluna do BD que vai setar os valores
    dl.DataValueField = "Campo"

    Espero ter ajudado, abraços!


    thiagokoelho

    quarta-feira, 9 de maio de 2012 20:55
  • Pnet

    Para preencher o seu DropDownList, não precisa colocar o DataSource dentro de um While

    O que você quer é apenas preencher o combo com as informações que vem do banco?


    Bruno Viegas | Desenvolvedor Web | Desenvolvedor Dynamics CRM

    quarta-feira, 9 de maio de 2012 20:56
  • isso mesmo.
    quarta-feira, 9 de maio de 2012 21:04
  • Retire esta parte do seu codigo

    if(dr.HasRows)
     {
       while(dr.Read()
       {
         string nome = dr["EMI_C_NOME"].ToString();
         dl.DataSource = dr;
         dl.DataBind();
       }
     }

    Utilize assim

    if(dr.HasRows)
    {
        dl.DataTextField = "Campo";//Coleque aqrui a coluna do Data Reader que você quer que apareça para o Usuario
        dl.DataTextValue = "Campo"; // Coloque aqui a coluna do Data Reader que você quer que o DropDown te forneça quando algo for selecionado
        dl.DataSource = dr;
        dl.DataBind();
    }

    Teste assim, creio que vai dar certo.


    Bruno Viegas | Desenvolvedor Web | Desenvolvedor Dynamics CRM

    quarta-feira, 9 de maio de 2012 21:10
  • Meu código completo. Seeu retiro otext e o value, vem o erro citado bem acima. Se deixo, a combo vem com os valores default na tela aspx.

    using System;
    using System.Linq;
    using System.Web;
    using System.Data.OracleClient;
    using System.Data;
    using System.Text;
    using System.Configuration;
    using System.Collections.Generic;
    using System.Web.UI.WebControls;


    namespace GetNet.Monitoracao.UI.Web.Graficos
    {
        public class PreencheComboboxBL
        {
            private OracleCommand comando;

            public Boolean Execute(DropDownList dl)
            {
                Boolean retorno = false;

                string Erro = "";

                StringBuilder comandoSQL = new StringBuilder();
                comandoSQL.AppendLine("SELECT ");
                comandoSQL.AppendLine("EMI_C_NOME ");
                //comandoSQL.AppendLine(", ");
                comandoSQL.AppendLine("FROM  ");
                comandoSQL.AppendLine("MNT_EMI_EMISSOR ");

                OracleConnection oracleConexao = new OracleConnection();
                oracleConexao.ConnectionString = ConfigurationManager.ConnectionStrings["oracleConexao"].ConnectionString;

                this.comando = new OracleCommand(comandoSQL.ToString(), oracleConexao);
                try
                {
                    oracleConexao.Open();
                    comando.ExecuteNonQuery();

                    OracleDataReader dr = comando.ExecuteReader();
                   
                    dl.DataSource     = dr;
                    dl.DataTextField  = dr["EMI_C_NOME"].ToString();
                    dl.DataValueField = dr["EMI_N_CODIGO"].ToString();
                    dl.DataBind();

                }
                catch (Exception excecao)
                {
                    Erro = excecao.Message;
                }
                finally
                {
                    oracleConexao.Close();
                }

                comando.Dispose();
                retorno = true;
                return retorno;
            }
        }
    }

    //Aqui eu chamo a classe
     private PreencheComboboxBL cb = new PreencheComboboxBL();

            protected void Page_Load(object sender, EventArgs e)
            {
                cb.Execute(cboEmissor);
               
            }

    quarta-feira, 9 de maio de 2012 21:11
  • O erro que dá é: No Data exists for row or column....
    quarta-feira, 9 de maio de 2012 21:17
  • Faça assim

    dl.DataTextField  = "EMI_C_NOME";

    dl.DataValueField = "EMI_N_CODIGO";


    Bruno Viegas | Desenvolvedor Web | Desenvolvedor Dynamics CRM

    • Marcado como Resposta pnet quarta-feira, 9 de maio de 2012 22:58
    quarta-feira, 9 de maio de 2012 21:19
  • Valeu, era isso mesmo. resolvido.
    quarta-feira, 9 de maio de 2012 21:37
  • Blz

    Sempre que precisar estaremos ai

    Marque um resposta como verdadeira para poder ajudar a outras pessoas que tenham o mesmo problema

    Vlw


    Bruno Viegas | Desenvolvedor Web | Desenvolvedor Dynamics CRM

    quarta-feira, 9 de maio de 2012 21:40