none
Preenchimento de dropdowlist genérica RRS feed

  • Pergunta

  • Existe algum método ou função genérica para preencher uma combobox?

    Porr exemplo, tenho uma página de filtro. Nessa página existe várias combobox e claro cada uma terá seu valor. Então em vez de fazer um método ou função pra cada uma das combos, gostaria de fazeruma genérica.

    é possível?

    segunda-feira, 13 de fevereiro de 2012 13:48

Respostas

  • Public Class ObjetoGenerico
    	Private m_Identificador As Integer
    	Private m_Text As String
    	Public Property Identificador() As Integer
    		Get
    			Return m_Identificador
    		End Get
    		Set
    			m_Identificador = Value
    		End Set
    	End Property
    	
    	Public Property Text() As String
    		Get
    			Return m_Text
    		End Get
    		Set
    			m_Text = Value
    		End Set
    	End Property
    	
    End Class
    Apenas uma dica: a linguagem não deve ser uma limitação para o entendimento. 
    Para converter código CSharp para vb.net use: http://www.developerfusion.com/tools/convert/csharp-to-vb/

    Existe outros sistes que fazem a mesma coisa.

    Paulo César Viana
    .NET Developer
    MCC - Microsoft Community Contributor
    MCP - Microsoft Certified Professional
    MCTS - Microsoft Certified Technology Especialist
    --
    Marque as respostas e contribua para uma melhora no fórum.

    • Marcado como Resposta Harley Araujo quarta-feira, 15 de fevereiro de 2012 10:59
    segunda-feira, 13 de fevereiro de 2012 14:17
  •  DisplayMember e ValueMember existe no controle ComboBox (windows forms). Se for web não tem, você vai usar DataTextField  e DataValueField.

    Paulo César Viana
    .NET Developer
    MCC - Microsoft Community Contributor
    MCP - Microsoft Certified Professional
    MCTS - Microsoft Certified Technology Especialist
    --
    Marque as respostas e contribua para uma melhora no fórum.

    • Marcado como Resposta Harley Araujo quarta-feira, 15 de fevereiro de 2012 10:59
    segunda-feira, 13 de fevereiro de 2012 14:37
  • SqlConnection conexao = new SqlConnection(strConexao);
    SqlCommand cmd = new SqlCommand();
    cmd.Connection = conexao;
    cmd.CommandText = "nome_da_sp";
    cmd.CommandType = CommandType.StoredProcedure;
    
    SqlDataReader reader = null;
    
    ObjetoGenerico objGenerico;
    List<objetogenerico> lstObjetoGenerico = new List<objetogenerico>();
    		 
    try
    {             
    	
       conexao.Open();
       reader = cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
    
       while (reader.Read())
       {
    	   objGenerico = new ObjetoGenerico();
    	   objGenerico.Identificador = int.Parse(reader["id"].ToString());
    	   objGenerico.Text = reader["coluna1"].ToString();
    	   lstObjetoGenerico.Add(objGenerico); 
       }
    
       combo.DataTextField = "Text";
       combo.DataValueField = "Identificador";
       combo.DataSource = lstObjetoGenerico;
       combo.DataBind();
    }
    catch (Exception)
    {               
       throw;
    }</objetogenerico></objetogenerico>


    Paulo César Viana
    .NET Developer
    MCC - Microsoft Community Contributor
    MCP - Microsoft Certified Professional
    MCTS - Microsoft Certified Technology Especialist
    --
    Marque as respostas e contribua para uma melhora no fórum.


    segunda-feira, 13 de fevereiro de 2012 15:39

Todas as Respostas

  • Cria um objeto Genérico com duas propriedades:
    public class ObjetoGenerico
    {
    	public int Identificador { get; set; }
    	public string Text { get; set; }
    }

    Na hora de utilizar você pode fazer:

    public void CarregarNomes()
    {
    	List<objetogenerico> lstNomes = new List<objetogenerico>();
    	lstNomes.Add(new ObjetoGenerico() { Identificador = 1, Text = "Nome 1" });
    	lstNomes.Add(new ObjetoGenerico() { Identificador = 2, Text = "Nome 2" });
    	lstNomes.Add(new ObjetoGenerico() { Identificador = 3, Text = "Nome 3" });
    
    	seControle.DataSource = lstNomes;
    	seControle.DisplayMember = "Text";
    	seControle.ValueMember = "Identificador";
    
    }
    
    public void CarregarModalidades()
    {
    	List<objetogenerico> lstModalidades = new List<objetogenerico>();
    	lstModalidades.Add(new ObjetoGenerico() { Identificador = 1, Text = "Modalidade 1" });
    	lstModalidades.Add(new ObjetoGenerico() { Identificador = 2, Text = "Modalidade 2" });
    	lstModalidades.Add(new ObjetoGenerico() { Identificador = 3, Text = "Modalidade 3" });
    
    	seControle.DataSource = lstModalidades;
    	seControle.DisplayMember = "Text";
    	seControle.ValueMember = "Identificador";
    }</objetogenerico></objetogenerico></objetogenerico></objetogenerico>


    Paulo César Viana
    .NET Developer
    MCC - Microsoft Community Contributor
    MCP - Microsoft Certified Professional
    MCTS - Microsoft Certified Technology Especialist
    --
    Marque as respostas e contribua para uma melhora no fórum.



    segunda-feira, 13 de fevereiro de 2012 14:04
  • como seria a definição da classe objeto generio em vb.net?
    segunda-feira, 13 de fevereiro de 2012 14:10
  • Public Class ObjetoGenerico
    	Private m_Identificador As Integer
    	Private m_Text As String
    	Public Property Identificador() As Integer
    		Get
    			Return m_Identificador
    		End Get
    		Set
    			m_Identificador = Value
    		End Set
    	End Property
    	
    	Public Property Text() As String
    		Get
    			Return m_Text
    		End Get
    		Set
    			m_Text = Value
    		End Set
    	End Property
    	
    End Class
    Apenas uma dica: a linguagem não deve ser uma limitação para o entendimento. 
    Para converter código CSharp para vb.net use: http://www.developerfusion.com/tools/convert/csharp-to-vb/

    Existe outros sistes que fazem a mesma coisa.

    Paulo César Viana
    .NET Developer
    MCC - Microsoft Community Contributor
    MCP - Microsoft Certified Professional
    MCTS - Microsoft Certified Technology Especialist
    --
    Marque as respostas e contribua para uma melhora no fórum.

    • Marcado como Resposta Harley Araujo quarta-feira, 15 de fevereiro de 2012 10:59
    segunda-feira, 13 de fevereiro de 2012 14:17
  • Só que preciso consultar uma procedure e retornar os dados da consulta na combo. Dessa forma não sei como seria. Segue código:

    Public Sub CarregarNomes(ByVal combo As DropDownList, ByVal Indexador As IndexadorInfo)
    
            command.CommandType = CommandType.StoredProcedure
            command.CommandText = "Retorna_Indexador"
            command.Connection = connection
    
            command.Parameters.Add("@nom_indexador", SqlDbType.VarChar, 50).Value = Indexador.Nom_Indexador
    
            Dim lstNomes As New List(Of IndexadorInfo.ObjetoGenerico)()
    	lstNomes.Add(New IndexadorInfo.ObjetoGenerico() With { _
    		Key .Identificador = 1, _
    		Key .Text = "Nome 1" _
    	})
    	lstNomes.Add(New IndexadorInfo.ObjetoGenerico() With { _
    		Key .Identificador = 2, _
    		Key .Text = "Nome 2" _
    	})
    	lstNomes.Add(New IndexadorInfo.ObjetoGenerico() With { _
    		Key .Identificador = 3, _
    		Key .Text = "Nome 3" _
    	})
    
            combo.DataSource = lstNomes
            combo.DisplayMember = "Text"
            combo.ValueMember = "Identificador"
    
        End Sub

    segunda-feira, 13 de fevereiro de 2012 14:33
  •  DisplayMember e ValueMember existe no controle ComboBox (windows forms). Se for web não tem, você vai usar DataTextField  e DataValueField.

    Paulo César Viana
    .NET Developer
    MCC - Microsoft Community Contributor
    MCP - Microsoft Certified Professional
    MCTS - Microsoft Certified Technology Especialist
    --
    Marque as respostas e contribua para uma melhora no fórum.

    • Marcado como Resposta Harley Araujo quarta-feira, 15 de fevereiro de 2012 10:59
    segunda-feira, 13 de fevereiro de 2012 14:37
  • ok.

    Mais como eu faria para preencher os dados com o retorno do banco? Pq a maneira que sei para preencher uma combobox é:

    SqlCommand cmd = new SqlCommand();
    DataSet ds = new DataSet();
    
    try
    {
    cmd.CommandText = "procedure";
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Connection = conn;
    
    SqlDataAdapter da = new SqlDataAdapter(cmd);
    da.Fill(ds, "tabela");
    
    //preenche a combo
    combo.DataTextField = "coluna1";
    combo.DataValueField = "id";
    combo.DataSource = ds.Tables["tbl_profissao"].DefaultView;
    combo.DataBind();
    
    combo.Items.Insert(0, "Selecione...");
    combo.SelectedIndex = 0;
    
    }
    catch (Exception ex)
    {
    
    string x = ex.Message;
    }
    
    }

    Nessa seu exemplo não sei como se encaixaria. como seria?
    segunda-feira, 13 de fevereiro de 2012 14:44
  • SqlConnection conexao = new SqlConnection(strConexao);
    SqlCommand cmd = new SqlCommand();
    cmd.Connection = conexao;
    cmd.CommandText = "nome_da_sp";
    cmd.CommandType = CommandType.StoredProcedure;
    
    SqlDataReader reader = null;
    
    ObjetoGenerico objGenerico;
    List<objetogenerico> lstObjetoGenerico = new List<objetogenerico>();
    		 
    try
    {             
    	
       conexao.Open();
       reader = cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
    
       while (reader.Read())
       {
    	   objGenerico = new ObjetoGenerico();
    	   objGenerico.Identificador = int.Parse(reader["id"].ToString());
    	   objGenerico.Text = reader["coluna1"].ToString();
    	   lstObjetoGenerico.Add(objGenerico); 
       }
    
       combo.DataTextField = "Text";
       combo.DataValueField = "Identificador";
       combo.DataSource = lstObjetoGenerico;
       combo.DataBind();
    }
    catch (Exception)
    {               
       throw;
    }</objetogenerico></objetogenerico>


    Paulo César Viana
    .NET Developer
    MCC - Microsoft Community Contributor
    MCP - Microsoft Certified Professional
    MCTS - Microsoft Certified Technology Especialist
    --
    Marque as respostas e contribua para uma melhora no fórum.


    segunda-feira, 13 de fevereiro de 2012 15:39
  • Cara fiz dessa forma mesmo. Não foge muito do seu exemplo. Mesm assim estou usando o exmplo que passou do ObjetoGenerico. Não muito como fugir, da forma de preencher a combo:

    Public Sub Carregar(ByVal combo As DropDownList)
    
            Dim obj As New IndexadorInfo.ObjetoGenerico
    
            Dim ds As DataSet
            ds = New DataSet()
    
            Try
    
                command.CommandText = "Procedure"
                command.CommandType = CommandType.StoredProcedure
                command.Connection = connection
    
                Dim da As New SqlDataAdapter(command)
                da.Fill(ds, "tabela")
    
                'chama classe do obejto genérico para preenchimento de dropdowlist
                obj.Text = "coluna1"
                obj.Identificador = "coluna2"
    
                combo.DataTextField = obj.Text
                combo.DataValueField = obj.Identificador
                combo.DataSource = ds.Tables("tabela").DefaultView
                combo.DataBind()
    
                combo.Items.Insert(0, "Selecione um Indexador")
                combo.SelectedIndex = 0
    
            Catch ex As Exception
    
                Dim erro As String
    
                erro = ex.Message.ToString()
    
            End Try
    
        End Sub
    Valeu!
    segunda-feira, 13 de fevereiro de 2012 15:43
  • Está errado. Ou você usa o DataSet como Fonte de dados ou o a Lista (list). Se for usar o dataSet não tem porque ter um objeto genérico.

    Se você optar por usar um DataSet ao invês do DataReader para carregar um objeto List, você precisa percorrer as "linhas" (rows) da tabela que existe no seu DataSet(foreach). Para cada linha você vai recuperar o valor e com isto criar um objeto "genérico". Em seguida adicionar na Lista (list). Entendeu? DataSet não se faz necessário.


    Paulo César Viana
    .NET Developer
    MCC - Microsoft Community Contributor
    MCP - Microsoft Certified Professional
    MCTS - Microsoft Certified Technology Especialist
    --
    Marque as respostas e contribua para uma melhora no fórum.

    segunda-feira, 13 de fevereiro de 2012 15:50
  • Só que no seu exemplo não consegui adaptar para ler pegar os dados de retorno das procedures. Como seria no seu exemplo?
    segunda-feira, 13 de fevereiro de 2012 16:32
  • No penultimo post eu coloquei um exemplo.

    Paulo César Viana
    .NET Developer
    MCC - Microsoft Community Contributor
    MCP - Microsoft Certified Professional
    MCTS - Microsoft Certified Technology Especialist
    --
    Marque as respostas e contribua para uma melhora no fórum.

    segunda-feira, 13 de fevereiro de 2012 16:49
  • Value! Deu certo.
    terça-feira, 14 de fevereiro de 2012 00:07
  • Rafa,

    Marque as respostas. Obrigado


    Paulo César Viana
    .NET Developer
    MCC - Microsoft Community Contributor
    MCP - Microsoft Certified Professional
    MCTS - Microsoft Certified Technology Especialist
    --
    Marque as respostas e contribua para uma melhora no fórum.

    terça-feira, 14 de fevereiro de 2012 01:29