AJUDA DEVEXPRESS XTRAEDITOR COMBOBOXEDIT
Bom dia a Todos...
Alguem usa os Componentes do DevExpress ? Se sim, tem como alterar o Index do ComboBoxEdit ?
Pelo que eu percebi quando voce carrega o combo ele define os Index automaticamente e eu queria alterar esses Index ..
Alguem sabe como ? Grato desde já...
Alguem usa os Componentes do DevExpress ? Se sim, tem como alterar o Index do ComboBoxEdit ?
Pelo que eu percebi quando voce carrega o combo ele define os Index automaticamente e eu queria alterar esses Index ..
Alguem sabe como ? Grato desde já...
Porque trabalhar com o index de uma combo, quando pode trabalhar com o valor dela?
KERPLUNK..pode ser também....e como faz isso ?
Todo e qualquer combo, possui as propriedades [Ô]DataTextField[Ô] e [Ô]DataValueField[Ô] que correspondem respectivamente ao valor de cada Ãtem e o que deve ser exibido no mesmo. Por exemplo, uma lista de clientes que vem do banco assim:
Codigo;Nome;DataNascimento
1;Jose;01/05/1976
3;Paulo;04/06/1970
5;Antonio;08/09/1978
Quando você buscar essa lista, seria algo como(C#):
List<Cliente> clientes = DAO.BuscaClientes(); //BuscaClientes, retorna uma lista já preenchida de clientes
drpCliente.DataTextField = [Ô]Nome[Ô];
drpCliente.DataValueField = [Ô]Codigo[Ô];
drpCliente.DataSource = clientes;
//drpCliente.DataBind();// caso seja aplicação web...
Com isso, seu dropdown vai ser preenchido com os Ãtens da lista [Ô]clientes[Ô], o que vai aparecer no dropdown é:
Jose
Paulo
Antonio
Mas quando você usar a propriedade [Ô]SelectedValue[Ô], vai ter 1 ou 3 ou 5, de acordo com o Ãtem selecionado, não importando assim a posição em que o mesmo aparece, você pode até mesmo fazer o select(dentro do método [Ô]BuscaClientes[Ô]) ordenado por data ou por código, da maneira que você quiser, pois o que vai importar é o código de quem está selecionado e não sua posição na combo...
Codigo;Nome;DataNascimento
1;Jose;01/05/1976
3;Paulo;04/06/1970
5;Antonio;08/09/1978
Quando você buscar essa lista, seria algo como(C#):
List<Cliente> clientes = DAO.BuscaClientes(); //BuscaClientes, retorna uma lista já preenchida de clientes
drpCliente.DataTextField = [Ô]Nome[Ô];
drpCliente.DataValueField = [Ô]Codigo[Ô];
drpCliente.DataSource = clientes;
//drpCliente.DataBind();// caso seja aplicação web...
Com isso, seu dropdown vai ser preenchido com os Ãtens da lista [Ô]clientes[Ô], o que vai aparecer no dropdown é:
Jose
Paulo
Antonio
Mas quando você usar a propriedade [Ô]SelectedValue[Ô], vai ter 1 ou 3 ou 5, de acordo com o Ãtem selecionado, não importando assim a posição em que o mesmo aparece, você pode até mesmo fazer o select(dentro do método [Ô]BuscaClientes[Ô]) ordenado por data ou por código, da maneira que você quiser, pois o que vai importar é o código de quem está selecionado e não sua posição na combo...
Olá F001E
Você pode obter um valor selecionado do ComboBoxEdit através das propriedades [ô]EditValue[ô] e [ô]Text[ô].
Você pode obter um valor selecionado do ComboBoxEdit através das propriedades [ô]EditValue[ô] e [ô]Text[ô].
O Problema que o Combo do DevExpress nao tem o [Ô]DataTextField[Ô] e [Ô]DataValueField[Ô]....
Carregar os Dados não é problema ....o problema é Selecionar um Registro no Combo uma vez que só Salvo no Banco do Dados o Código do Centro de Custo.....por isso falei do Index..se tivesse como Alterar eu colocava o Código do Centro de Custo dai era fácil selecionar na Combo....
Carregar os Dados não é problema ....o problema é Selecionar um Registro no Combo uma vez que só Salvo no Banco do Dados o Código do Centro de Custo.....por isso falei do Index..se tivesse como Alterar eu colocava o Código do Centro de Custo dai era fácil selecionar na Combo....
Não existe essas propriedades com esse mesmo nome, mas existem equivalentes:
<dxe:ASPxComboBox ID=[Ô]ASPxComboBox1[Ô] runat=[Ô]server[Ô] DataSourceID=[Ô]ObjectDataSource2[Ô] TextField=[Ô]FirstName[Ô] ValueField=[Ô]Guid[Ô] ValueType=[Ô]System.Guid[Ô]>
No caso, seriam [Ô]TextField[Ô] e [Ô]ValueField[Ô]
<dxe:ASPxComboBox ID=[Ô]ASPxComboBox1[Ô] runat=[Ô]server[Ô] DataSourceID=[Ô]ObjectDataSource2[Ô] TextField=[Ô]FirstName[Ô] ValueField=[Ô]Guid[Ô] ValueType=[Ô]System.Guid[Ô]>
No caso, seriam [Ô]TextField[Ô] e [Ô]ValueField[Ô]
Tudo depende de como você carrega os dados no ComboBoxEdit, para você selecionar o item você vai precisar encontrar o Ãndice dele, para isso você vai usar SeuComboBoxEdit.Properties.Items.IndexOf, mas desta forma você já precisa ter o objeto correspondente ao item, então isso varia um pouco da forma como você carrega os dados no combo e de como você pega qual deles deve ser selecionado.
Se você explicar melhor como você carrega o combo e como pega qual item deve ser selecionado pode ficar mais fácil ajudar.
Se você explicar melhor como você carrega o combo e como pega qual item deve ser selecionado pode ficar mais fácil ajudar.
OCELOT...vamos lá...
Carrego o ComboBox assim
Private Sub CarregaCentroCusto()
Try
Dim ComboCentroCusto As DevExpress.XtraEditors.Repository.RepositoryItemComboBox = cboCentroCusto.Properties
SQL = [Ô][Ô]
SQL = SQL & [Ô]SELECT CENTROCUSTO,DESCRICAO[Ô] & Chr(13)
SQL = SQL & [Ô] FROM CENTROCUSTO[Ô] & Chr(13)
SQL = SQL & [Ô] WHERE 1 = 1[Ô] & Chr(13)
SQL = SQL & [Ô] AND CENTROCUSTO <> 0[Ô] & Chr(13)
SQL = SQL & [Ô] ORDER BY 1[Ô]
CarregarDataSet(SQL, BancoSave)
ComboCentroCusto.Items.Clear()
If oDataTable.Rows.Count > 0 Then
For Each oDataRow In oDataTable.Rows
ComboCentroCusto.Items.AddRange(New String() {oDataRow([Ô]Descricao[Ô])})
Next
End If
Catch ex As Exception
TratarErro([Ô]frmAgendamentoConsulta_CentroCusto[Ô], [Ô]CarregaCentroCusto[Ô], Err.Number, Err.Description, Erl)
End Try
End Sub
Tentei usar o IndexOf mas nao funcionou nao...provavelmente fix errado....
Carrego o ComboBox assim
Private Sub CarregaCentroCusto()
Try
Dim ComboCentroCusto As DevExpress.XtraEditors.Repository.RepositoryItemComboBox = cboCentroCusto.Properties
SQL = [Ô][Ô]
SQL = SQL & [Ô]SELECT CENTROCUSTO,DESCRICAO[Ô] & Chr(13)
SQL = SQL & [Ô] FROM CENTROCUSTO[Ô] & Chr(13)
SQL = SQL & [Ô] WHERE 1 = 1[Ô] & Chr(13)
SQL = SQL & [Ô] AND CENTROCUSTO <> 0[Ô] & Chr(13)
SQL = SQL & [Ô] ORDER BY 1[Ô]
CarregarDataSet(SQL, BancoSave)
ComboCentroCusto.Items.Clear()
If oDataTable.Rows.Count > 0 Then
For Each oDataRow In oDataTable.Rows
ComboCentroCusto.Items.AddRange(New String() {oDataRow([Ô]Descricao[Ô])})
Next
End If
Catch ex As Exception
TratarErro([Ô]frmAgendamentoConsulta_CentroCusto[Ô], [Ô]CarregaCentroCusto[Ô], Err.Number, Err.Description, Erl)
End Try
End Sub
Tentei usar o IndexOf mas nao funcionou nao...provavelmente fix errado....
Eu diria para você usar um outro componente deles que deve facilitar um pouco isso, no caso ali você está trazendo só a descrição, porém pleo que entendi você precisa selecionar o item baseado no código, então eu diria para usar o LookUpEdit, que é basicamente um combo que funciona ligado a uma fonte de dados
Nele em vez de você adicionar item por item você simplesmente colocar o seu datatable como DataSource dele, e então você pode encontrar o indice baseado em qualquer campo do datatable
Ficaria algo assim, você adiciona o LookUpEdit no lugar do combo e define o Properties.DisplayMember dele pro nome do campo [Ô]DESCRICAO[Ô], e então na hora de carregar:
Repare que adicionei o campo CODIGO na SQL, ele vai ser usado para localizar o registro, então para selecionar ficaria algo do tipo:
lookUpEdit.ItemIndex = lookUpEdit.Properties.GetDataSourceRowIndex([Ô]CODIGO[Ô], variavelComOCodigoParaSerSelecionado)
Não testei aqui, mas é algo deste tipo, faça uns testes ai, se não conseguir eu dou uma olhada melhor aqui.
Nele em vez de você adicionar item por item você simplesmente colocar o seu datatable como DataSource dele, e então você pode encontrar o indice baseado em qualquer campo do datatable
Ficaria algo assim, você adiciona o LookUpEdit no lugar do combo e define o Properties.DisplayMember dele pro nome do campo [Ô]DESCRICAO[Ô], e então na hora de carregar:
Private Sub CarregaCentroCusto()
Try
SQL = [Ô][Ô]
SQL = SQL & [Ô]SELECT CODIGO,CENTROCUSTO,DESCRICAO[Ô] & Chr(13)
SQL = SQL & [Ô] FROM CENTROCUSTO[Ô] & Chr(13)
SQL = SQL & [Ô] WHERE 1 = 1[Ô] & Chr(13)
SQL = SQL & [Ô] AND CENTROCUSTO <> 0[Ô] & Chr(13)
SQL = SQL & [Ô] ORDER BY 1[Ô]
CarregarDataSet(SQL, BancoSave)
lookUpEdit.Properties.DataSource = oDataTable
Catch ex As Exception
TratarErro([Ô]frmAgendamentoConsulta_CentroCusto[Ô], [Ô]CarregaCentroCusto[Ô], Err.Number, Err.Description, Erl)
End Try
End Sub
Repare que adicionei o campo CODIGO na SQL, ele vai ser usado para localizar o registro, então para selecionar ficaria algo do tipo:
lookUpEdit.ItemIndex = lookUpEdit.Properties.GetDataSourceRowIndex([Ô]CODIGO[Ô], variavelComOCodigoParaSerSelecionado)
Não testei aqui, mas é algo deste tipo, faça uns testes ai, se não conseguir eu dou uma olhada melhor aqui.
OCELOT...deu certo seu esquema ae....mas quando eu seleciono a caixa do Look não aparece o que foi Selecionado..fica igual da figura ae....
Tópico encerrado , respostas não são mais permitidas