Usuário com melhor resposta
Preenchimento de dropdowlist genérica

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?
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
-
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
-
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.- Editado Paulo César Viana segunda-feira, 13 de fevereiro de 2012 15:40
- Marcado como Resposta Harley Araujo quarta-feira, 15 de fevereiro de 2012 10:59
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.
- Editado Paulo César Viana segunda-feira, 13 de fevereiro de 2012 14:06
- Sugerido como Resposta Fernando Henrique Inocêncio Borba FerreiraMicrosoft employee segunda-feira, 13 de fevereiro de 2012 14:47
-
-
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
-
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
-
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
-
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? -
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.- Editado Paulo César Viana segunda-feira, 13 de fevereiro de 2012 15:40
- Marcado como Resposta Harley Araujo quarta-feira, 15 de fevereiro de 2012 10:59
-
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! -
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. -
-
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. -
-
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.