Usuário com melhor resposta
Escolhendo item em uma combobox

Pergunta
-
Olá,
Eu tenho uma base de dados que é "DataSource" de uma combobox. Os valores de um dos campos dessa base - no caso, "Nome" - aparecem nesse controle. Quando eu insiro um novo objeto em minha base, os "Nome"s são atualizados automaticamente na Combobox conforme o previsto.
Combo.DataSource = From Nome In d.Coefs Select Nome Combo.DisplayMember = "Nome"
No caso, "d" é meu datacontext, "Coefs" é uma das tabelas e "Combo" é o meu Combobox.
O problema que encontro se dá pela minha necessidade em selecionar, nessa Combobox, o último objeto adicionado à base de dados logo após a sua adesão à base. Eu realmente não sei como proceder. O que eu estava tentando era algo nesse sentido:
Combo.SelectedItem = From Nome In Combo.Items Where Nome.Nome = ref Select Nome
Onde "ref" é o valor do "Nome" (uma string) que acabou de ser inserido na base.
Esse código acima é apenas um exemplo, caso a solução seja bastante distinta, podem mandar. Outra coisa que eu já tentei - e que funciona - é a utilização de um parâmetro auxiliar com auto-incremento onde eu colocaria minha tabela em ordem descendente de acordo com esse parâmetro, mas fica esteticamente bem ruim. Ideias ? Agradeço desde já.
Att,
Ricardo Scheufele
Respostas
-
Olá,
Resolvi o problema fazendo isso. Mas poste sua resposta, se quiser, estou bem curioso.
Combo.DataSource = From Nome In d.Coefs Order By Nome.Nome Select Nome Dim obje = From Nome In Combo.Items Where Nome.Nome = ref Select Nome.Nome For Each element In obje Combo.SelectedValue = element Next
Valeu por tudo.
Att,
Ricardo S.
- Marcado como Resposta themartians sábado, 11 de janeiro de 2014 15:15
-
Olá Ricardo,
me desculpe, eu estava com a cabeça no componente DropDownList (o combo box do asp.net), esse componente tem o Value, ou seja, é possível adicionar um value e um text para o componente.
Mas seguindo a mesma lógica criei o código abaixo que funcionou perfeitamente também, de uma olhada:
''INSERINDO VALORES NO COMBO ComboBox1.Items.Add("A") ComboBox1.Items.Add("B") ComboBox1.Items.Add("D") ComboBox1.Items.Add("E") Dim aux(ComboBox1.Items.Count - 1 + 1) As String ''DECLARANDO ARRAY COM TAMANHO DO COMBO +1 For i = 0 To ComboBox1.Items.Count - 1 'Criando uma cópia do combo dentro do array antes de adicionar o próximo valor no combo aux(i) = ComboBox1.Items(i) Next ComboBox1.Items.Add("C") 'ADICIONANDO PRÓXIMO VALOR AO COMBO aux(ComboBox1.Items.Count - 1) = ComboBox1.Items(ComboBox1.Items.Count - 1) ''ADICIONANDO NO ARRAY O ULTIMO VALOR ADICIONADO NO COMBO ComboBox1.Sorted = True 'DEIXANDO O COMBO EM ORDEM ALFABÉTICA, OU SEJA, O VALOR "C" NÃO SERÁ MAIS O ULTIMO 'AGORA O CÓDIGO PARA VERIFICAR QUAL O ULTIMO ITEM ADICIONADO 'VOU COMPARAR O COMBO COM O ARRAY E O PRIMEIRO ITEM DO COMBO QUE FOR DIFERENTE DO ARRAY É O ULTIMO ADICIONADO For i = 0 To ComboBox1.Items.Count - 1 If aux(i) <> ComboBox1.Items(i) Then ComboBox1.SelectedIndex = i Exit Sub 'QUANDO ELE ENCONTRA EU ENCERRO A FUNÇAO, PORQUE SE ELE NÃO ENCONTRA ALGUM DIFERENTE QUER DIZER QUE O ULTIMO ITEM INSERIDO JÁ ESTA EM ORDEM ALFABÉTICA End If Next ''CASE ELE NÃO ENCONTRE NENHUM DIFERENTE EU SELECIONO O ULTIMO VALOR DO COMBO ComboBox1.SelectedIndex = ComboBox1.Items.Count - 1
Wennder
- Editado Wennder SantosMVP sábado, 11 de janeiro de 2014 04:50
- Marcado como Resposta themartians sábado, 11 de janeiro de 2014 15:15
Todas as Respostas
-
Olá Ricardo,
me desculpa se eu não entendi sua pergunta, mas, veja abaixo a linha de código para selecionar o ultimo valor inserido em um combobox.
Combo.SelectedIndex = Combo.Items.Count() - 1;
Espero ter ajudado.
Wennder
- Sugerido como Resposta Samuel Rodrigues dos Anjos quinta-feira, 9 de janeiro de 2014 20:20
-
Olá,
Obrigado pela resposta Wennder, mas não é isso não, cara. O que eu gostaria é de saber o último valor que foi adicionado. No caso, quando eu digo valor, eu me refiro ao último valor no parâmetro "Nome" da minha db.
Por exemplo, eu tenho na minha base:
Nome **********Peso********Densidade
Ferro************1 *************50
Cobre************0.5 ***********10
*Estou chutando esses valores.
O que eu faço em minha combobox, pro enquanto, é colocar os valores Ferro, Cobre e por aí vai. Pela ordem que eu coloquei (alfabética por nome) fica: Cobre, Ferro. Digamos que eu adicione por outros meios o material.
Estanho**********30**************8
Na minha combobox, aparecem agora: Cobre, Estanho e Ferro.
Isso é tranquilex, o que eu estou me batendo é colocar como SelectedItem, logo após a adição do último valor (no caso, Estanho), o valor "Estanho". Ou seja, a ordem da lista é alfabética, mas logo após adicionar um item, ele deve ser o meu "Selected Item". Ficou mais claro ? Valeu pela dica.
Att,
Ricardo Scheufele
- Editado themartians quinta-feira, 9 de janeiro de 2014 18:20 Formatação
-
Ola novamente Ricardo,
veja se eu entendi,
VALORES NO COMBO:
cobre
estanho
ouro
é adicionado um outro valor no combo, por exemplo 'ferro', este viria na ordem antes de ouro, mas, você queR que o 'ouro' fique selecionado. isso?
Se for isso, tente fazer assim:
*não vou colocar código, somente a ideia, se precisar de ajuda com o código é só falar.
Carregue o valor value do seu combo com o id da sua tabela e continue carregando o text do combo do jeito que está fazendo.
Quando atualizar o combo deixe o selectedValue = max(id) da tabela.
Conseguiu entender? ou melhor dizendo, eu consegui entender a dúvida? rs
Wennder
- Editado Wennder SantosMVP quinta-feira, 9 de janeiro de 2014 18:35
-
Olá,
Não, cara, mas é quase isso. Se, no seu exemplo, eu adicionar 'Ferro', quem deve aparecer como item selecionado é o 'Ferro'. O último item a adicionado deve ser selecionado. Eu tento fazer isso através da seleção do último parâmetro "Nome" selecionado. Por exemplo, veja o que tentei fazer - eu acho, já deletei e refiz muita coisa:
Dim teste = From Nome In Combo.Items Where Nome.Nome = ref Select Nome
Combo.SelectedItem = teste
Ou, ainda:Combo.SelectedItem = From Nome In Combo.Items Where Nome.Nome = ref Select Nome
Nesse exemplo, "ref" é o último parâmetro "Nome" adicionado. Debuggando, o valor de teste fica certinho, mas a igualdade não. No segundo caso, ele selecionada nada - o famoso "selecionada". Valeu novamente.
Att,
Ricardo Scheufele
-
Você já tentou colocar no value do combo algum valor?
por exemplo
value text
1 cobre
3 estanho
2 ouro
sempre incremente 1 ao value do próximo item inserido, por exemplo:
O próximo item a ser inserido "Ferro", ficaria acima do "Ouro" mas o "ferro" deve ficar selecionado.
value text
1 cobre
3 estanho
4 ferro
2 ouro
para selecionar o "ferro", que foi o ultimo item inserido ( você sabe disso porque o value dele é o maior ), faça um loop percorrendo o combo para verificar qual value é o maior
encontrando o maior, basta seleciona-lo.
combo.SelectedValue() = maiorvalue;
Wennder
- Editado Wennder SantosMVP quinta-feira, 9 de janeiro de 2014 19:59
- Sugerido como Resposta Samuel Rodrigues dos Anjos quinta-feira, 9 de janeiro de 2014 20:22
-
Sim, eu já tentei isso. Inclusive, no meu primeiro post eu falo sobre isso:
"Outra coisa que eu já tentei - e que funciona - é a utilização de um parâmetro auxiliar com auto-incremento onde eu colocaria minha tabela em ordem descendente de acordo com esse parâmetro, mas fica esteticamente bem ruim. Ideias ? Agradeço desde já."
Inclusive, fica esteticamente bem desagradável, pois a ordem de seleção do combobox fica fora de ordem alfabética e não fica muito legal procurar itens assim, pois a lista é imensa.
Att,
Ricardo Scheufele
*Edit: Acho que o meu problema é conceitual. Algum casting ou coisa do tipo. É uma impressão.- Editado themartians quinta-feira, 9 de janeiro de 2014 20:29
-
-
Exatamente, cara. Isso realmente é diferente de mudar a ordem pelo valor da posição. Mas fiz as modificações e o meu problema persiste, pois você diz o seguinte:
combo.SelectedValue() = maiorvalue
O que seria o seu "maiorvalue" ? O meu "ref" ? Uma string? Pois continua não encontrando esse valor e não atualizando na combobox. Na realidade, a situação fica muito parecida armazenar o último Nome entrado e excursionar pela tabela para procurá-lo.
Outra coisa, brigadaço pela ajuda, eu sei que o pessoal não tem muito tempo e é sempre muito legal.
Bleh, ultimo post do dia. Bom trabalho amanhã.
Att,
Ricardo S.
- Editado themartians quinta-feira, 9 de janeiro de 2014 21:14
-
Ola novamente Ricardo,
no combo box você consegue atribuir valores em 2 lugares, que são eles:
combo.TEXT = "ferro"
combo.VALUE = 1
A minha ideia para resolver seu problema é a seguinte:
Carregue também o value do seu combo, pois, este ira ser a sua ''variável'' auxiliar para selecionar o ultimo item inserido. De que forma? da forma que eu expliquei no penúltimo post.
O "maiorvalue" que você perguntou no seu ultimo post seria uma variável utilizada para armazenar o maior value atribuído a um item do combo ate o momento.
Se você ainda não estiver entendendo, eu crio um projetinho aqui e te mando.
Wennder
-
-
Olá,
Resolvi o problema fazendo isso. Mas poste sua resposta, se quiser, estou bem curioso.
Combo.DataSource = From Nome In d.Coefs Order By Nome.Nome Select Nome Dim obje = From Nome In Combo.Items Where Nome.Nome = ref Select Nome.Nome For Each element In obje Combo.SelectedValue = element Next
Valeu por tudo.
Att,
Ricardo S.
- Marcado como Resposta themartians sábado, 11 de janeiro de 2014 15:15
-
Ola novamente Ricardo,
no combo box você consegue atribuir valores em 2 lugares, que são eles:
combo.TEXT = "ferro"
combo.VALUE = 1
A minha ideia para resolver seu problema é a seguinte:
Carregue também o value do seu combo, pois, este ira ser a sua ''variável'' auxiliar para selecionar o ultimo item inserido. De que forma? da forma que eu expliquei no penúltimo post.
O "maiorvalue" que você perguntou no seu ultimo post seria uma variável utilizada para armazenar o maior value atribuído a um item do combo ate o momento.
Se você ainda não estiver entendendo, eu crio um projetinho aqui e te mando.
Wennder
Olá,
Se você postar um código, eu marco como resposta sem problemas, pois eu acho - acho - que ainda não compreendi 100%. A minha respota vai logo abaixo, eu realmente estava com dúvidas em outra coisa que seria o que retornava do meu query. Valeu.
Att,
Ricardo S.
- Editado themartians sábado, 11 de janeiro de 2014 03:08
- Marcado como Resposta themartians sábado, 11 de janeiro de 2014 15:15
- Não Marcado como Resposta themartians sábado, 11 de janeiro de 2014 15:15
-
Olá Ricardo,
me desculpe, eu estava com a cabeça no componente DropDownList (o combo box do asp.net), esse componente tem o Value, ou seja, é possível adicionar um value e um text para o componente.
Mas seguindo a mesma lógica criei o código abaixo que funcionou perfeitamente também, de uma olhada:
''INSERINDO VALORES NO COMBO ComboBox1.Items.Add("A") ComboBox1.Items.Add("B") ComboBox1.Items.Add("D") ComboBox1.Items.Add("E") Dim aux(ComboBox1.Items.Count - 1 + 1) As String ''DECLARANDO ARRAY COM TAMANHO DO COMBO +1 For i = 0 To ComboBox1.Items.Count - 1 'Criando uma cópia do combo dentro do array antes de adicionar o próximo valor no combo aux(i) = ComboBox1.Items(i) Next ComboBox1.Items.Add("C") 'ADICIONANDO PRÓXIMO VALOR AO COMBO aux(ComboBox1.Items.Count - 1) = ComboBox1.Items(ComboBox1.Items.Count - 1) ''ADICIONANDO NO ARRAY O ULTIMO VALOR ADICIONADO NO COMBO ComboBox1.Sorted = True 'DEIXANDO O COMBO EM ORDEM ALFABÉTICA, OU SEJA, O VALOR "C" NÃO SERÁ MAIS O ULTIMO 'AGORA O CÓDIGO PARA VERIFICAR QUAL O ULTIMO ITEM ADICIONADO 'VOU COMPARAR O COMBO COM O ARRAY E O PRIMEIRO ITEM DO COMBO QUE FOR DIFERENTE DO ARRAY É O ULTIMO ADICIONADO For i = 0 To ComboBox1.Items.Count - 1 If aux(i) <> ComboBox1.Items(i) Then ComboBox1.SelectedIndex = i Exit Sub 'QUANDO ELE ENCONTRA EU ENCERRO A FUNÇAO, PORQUE SE ELE NÃO ENCONTRA ALGUM DIFERENTE QUER DIZER QUE O ULTIMO ITEM INSERIDO JÁ ESTA EM ORDEM ALFABÉTICA End If Next ''CASE ELE NÃO ENCONTRE NENHUM DIFERENTE EU SELECIONO O ULTIMO VALOR DO COMBO ComboBox1.SelectedIndex = ComboBox1.Items.Count - 1
Wennder
- Editado Wennder SantosMVP sábado, 11 de janeiro de 2014 04:50
- Marcado como Resposta themartians sábado, 11 de janeiro de 2014 15:15