COMO POSICIONAR EM UM INDEX DE UM COMBOBOX

HORICH 18/09/2013 12:30:10
#429019
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



TUNUSAT 18/09/2013 13:36:34
#429027
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:

------------------------------------------------

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.
TUNUSAT 18/09/2013 13:52:56
#429031
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.
HORICH 18/10/2013 12:01:29
#430150
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...
HORICH 18/10/2013 12:05:24
#430151
Outro detalhe


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
Página 2 de 2 [15 registro(s)]
Tópico encerrado , respostas não são mais permitidas