COMO POSICIONAR EM UM INDEX DE UM COMBOBOX
Citação::
Mas Horich,
Para você posicionar o Index, você deve procurar o index na lista ou procurar pela chave primária...
... exemplo rápido:
1º) Crie um botão [Ô]btnProcura[Ô] naquele meu exemplo [Ô]ComboProblema[Ô].
2º) Adicione o código abaixo para o clique do botão:
-------------------
private void btnProcura_Click(object sender, EventArgs e)
{
if (txtNome.Text != [Ô][Ô])
{
cboProblema.SelectedIndex = cboProblema.FindString(txtNome.Text);
}
}
-------------------
Vou melhorar aquele exeplo depois te passo.
[][ô]s,
Tunusat.
Certo a minha situação é a seguinte:
Eu tenho um cadastro na qual o cliente tem o código do estado dele salvo junto na tabela, quando o usuario consulta esse cliente para visualizar o cadastro dele, o combobox de estado já esta carregado com todos os estados e com as chaves primarias como o [ô]Index[ô], porem eu preciso que quando ele mostrar o cliente que foi consultado o programa leia o combo e posicione no estado que esta vinculado com o cliente.
No VB6 eu usava o seguinte código:
Function Ãndice_Combo_TIC(ByVal Codigo As String, Combo As ComboBox) As String
Dim i As Integer
For i = 0 To Combo.ListCount - 1
If Combo.ItemData(i) = Codigo Then
Ãndice_Combo_TIC = Trim(UCase(Combo.List(i)))
Combo.ListIndex = Val(i)
Exit For
End If
Next i
End Function
Mesmo sabendo que os conceitos são diferentes do .net para o VB6 queria saber se tem como eu fazer algo semelhante a esse meu código =s
Horich,
Criei mau uma TextBox: [Ô]txtBusca[Ô] para simular o retorno da base e dados. NÃO pude usar o [Ô]txtNome[Ô], pois estava sendo atualizado automaticamente no meu exemplo, dai ...
... tentei traduzir o seu código VB6 para o meu código em C#.Net (misturou um pouco) ...
... comentei o seu código com [Ô]//[Ô] e veja que bicho deu:
------------------------------------------------
------------------------------------------------
Só tem um problema ... se NÃO achar, vai posicionar a Combo no último registro...
... bom ... pelo menos te dá uma idéia de como fazer ... certo ou errado?
[][ô]s,
Tunusat.
Criei mau uma TextBox: [Ô]txtBusca[Ô] para simular o retorno da base e dados. NÃO pude usar o [Ô]txtNome[Ô], pois estava sendo atualizado automaticamente no meu exemplo, dai ...
... tentei traduzir o seu código VB6 para o meu código em C#.Net (misturou um pouco) ...
... comentei o seu código com [Ô]//[Ô] e veja que bicho deu:
------------------------------------------------
private void btnProcura_Click(object sender, EventArgs e)
{
//Dim i As Integer;
int i;
//checagem minha para não ter problema depois
if (txtBusca.Text != [Ô][Ô] && cboProblema.Items.Count > 0)
{
///posicionei a combo no inÃcio
cboProblema.SelectedIndex = 1;
//For i = 0 To Combo.ListCount - 1
for (i = 1; i < cboProblema.Items.Count - 1; i++)
{
// indo buscar a informação em cada registro
AddCbo acc = (AddCbo)cboProblema.SelectedItem;
//If Combo.ItemData(i) = Codigo Then
if (acc.AccName.ToUpper() == txtBusca.Text.ToUpper())
{
//Ãndice_Combo_TIC = Trim(UCase(Combo.List(i)))
//Combo.ListIndex = Val(i)
// Eu NÃO preciso posicionar, pois o [Ô]SelectedIndex[Ô] já está posicionado!
//cboProblema.SelectedIndex =
//Exit For
return;
}
// Passando para o próximo index dentro da combo... e já posicionando-a
cboProblema.SelectedIndex++;
}
}
}
------------------------------------------------
Só tem um problema ... se NÃO achar, vai posicionar a Combo no último registro...
... bom ... pelo menos te dá uma idéia de como fazer ... certo ou errado?
[][ô]s,
Tunusat.
Horich,
Melhor em VB.NET, né?
Detalhe! ...
... Ao invés de incrementar a [Ô]SelectedIndex[Ô], preferà igualá-la a vairável [Ô]i[Ô].
-----------------------------------
-----------------------------------
Agora acho que vai ... embora continue posicionando no último registro caso não enconter.
[][ô]s,
Tunusat.
Melhor em VB.NET, né?
Detalhe! ...
... Ao invés de incrementar a [Ô]SelectedIndex[Ô], preferà igualá-la a vairável [Ô]i[Ô].
-----------------------------------
Dim i As Integer
Dim acc As AddCbo
[ô]checagem minha para não ter problema depois
If (txtBusca.Text <> [Ô][Ô] And cboProblemaVB.Items.Count > 0) Then
cboProblemaVB.SelectedIndex = 1
For i = 1 To cboProblemaVB.Items.Count - 1
[ô]indo buscar a informação em cada registro
acc = DirectCast(cboProblemaVB.SelectedItem, AddCbo)
[ô]If Combo.ItemData(i) = Codigo Then
If (acc.AccName.ToUpper() = txtBusca.Text.ToUpper()) Then
[ô]Ãndice_Combo_TIC = Trim(UCase(Combo.List(i)))
[ô]Combo.ListIndex = Val(i)
[ô]Eu NÃO preciso posicionar, pois o [Ô]SelectedIndex[Ô] já está posicionado!
[ô]cboProblemaVB.SelectedIndex =
[ô]Exit For
Return
End If
cboProblemaVB.SelectedIndex = i
Next (i)
End If
-----------------------------------
Agora acho que vai ... embora continue posicionando no último registro caso não enconter.
[][ô]s,
Tunusat.
Citação::
Horich,
Melhor em VB.NET, né?
Detalhe! ...
... Ao invés de incrementar a [Ô]SelectedIndex[Ô], preferà igualá-la a vairável [Ô]i[Ô].
-----------------------------------
Dim i As Integer
Dim acc As AddCbo
[ô]checagem minha para não ter problema depois
If (txtBusca.Text <> [Ô][Ô] And cboProblemaVB.Items.Count > 0) Then
cboProblemaVB.SelectedIndex = 1
For i = 1 To cboProblemaVB.Items.Count - 1
[ô]indo buscar a informação em cada registro
acc = DirectCast(cboProblemaVB.SelectedItem, AddCbo)
[ô]If Combo.ItemData(i) = Codigo Then
If (acc.AccName.ToUpper() = txtBusca.Text.ToUpper()) Then
[ô]Ãndice_Combo_TIC = Trim(UCase(Combo.List(i)))
[ô]Combo.ListIndex = Val(i)
[ô]Eu NÃO preciso posicionar, pois o [Ô]SelectedIndex[Ô] já está posicionado!
[ô]cboProblemaVB.SelectedIndex =
[ô]Exit For
Return
End If
cboProblemaVB.SelectedIndex = i
Next (i)
End If
-----------------------------------
Agora acho que vai ... embora continue posicionando no último registro caso não enconter.
[][ô]s,
Tunusat.
Depois de Um seculo, eu consegui voltar a este projeto, bom testei seu codigo e funcionou com o probleminha que você relatou né, eu conseguir achar uma solução, não é a melhor mais é uma solução rs
Sempre que eu carrego o combo eu coloco a primeira linha em branco ou seja o index 0 esta limpo
então quando ele não acha o código mando ele retornar para o index 0
Ficou assim o código:
Dim i As Integer
Dim acc As MeuItemData
Dim Item As Boolean
If (Combo.Items.Count > 0) Then
Combo.SelectedIndex = 1
Item = False
For i = 1 To Combo.Items.Count
[ô]indo buscar a informação em cada registro
acc = DirectCast(Combo.SelectedItem, MeuItemData)
If CType(Combo.SelectedItem, MeuItemData).Valor = UCase(Código) Then
If (acc.Descricao.ToUpper() = Combo.Text.ToUpper()) Then
Item = True
Exit For
End If
End If
If Combo.Items.Count > i Then
Combo.SelectedIndex = i
End If
Next (i)
If Item = False Then
Combo.SelectedIndex = 0
End If
End If
If CType(Combo.SelectedItem, MeuItemData).Valor = UCase(Código) Then << Esta linha ele compara os códigos, para já sair do for quando achar o certo, assim otimiza o processo
Seu código ajudou muito, na verdade vc me deu a resposta s coloquei o detalhe no final, obrigado pela ajuda, garanto que esse tópico vai ajudar muita gente...
Outro detalhe
Isto é para ele não posicionar no index maior, eu tive que tirar a clausula -1 do for por que ele não ia para o ultimo registro, assim ele vai para o ultimo só não reposiciona
If Combo.Items.Count > i Then
Combo.SelectedIndex = i
End If
Isto é para ele não posicionar no index maior, eu tive que tirar a clausula -1 do for por que ele não ia para o ultimo registro, assim ele vai para o ultimo só não reposiciona
Tópico encerrado , respostas não são mais permitidas