asp.net 0 Denunciar post Postado Novembro 11, 2005 Bom galera,Estou sem tempo para postar aqui no Blog, espero em breve ter mais tempo para escrever as minhas experiências com o .NETMas vou postar aqui uma dúvida que surgiu e não tenho conseguido resulver. Tenho numa deteminada situação 1 DataTable e 2 ListBox. Este DataTable tem os valores vindos de uma consulta ao banco, e preciso fazer assim:1 - Verificar que valores constantes no meu DataTable estão presentes no ListBox12 - Jogar para o ListBox2 o resultado do item 1, caso existam.3 - Retirar do ListBox 1 os itens que foram transferidos para o ListBox2P.s Fazer os itens ir de um para o outro é tranquilo, o que não consigo é fazer a comparação dos itens no DataTable com os itens do ListBox1, alguém pode me ajudar com esta bronca? Compartilhar este post Link para o post Compartilhar em outros sites
eriva_br 7 Denunciar post Postado Novembro 11, 2005 inicialmente temos duas maneiras de se fazer neston...1) você pode fazer dois loops e percorre-los ou 2) você pode fazer um loop em um list e definir uma chave primaria no datatable e pesquisar por esta chave primaria... (no caso de você ter uma quantidade muita extensa de registros esta opção é recomendada para aumento de performance)1) exemplo dos dois loops: Dim achou As Boolean For i As Integer = 0 To Me.lstMessages.Items.Count - 1 achou = False For Each row As DataRow In Me.DsClientes1.Tables(0).Rows If Me.lstMessages.Items(i).ToString = row("ClienteID").ToString Then achou = True Exit For End If Next If achou Then Me.lstMessages.Items(i) &= " - achou heheh" Else Me.lstMessages.Items(i) &= " - naum achou" End If Next2) exemplo com find: Dim foundrow As DataRow For i As Integer = 0 To Me.lstMessages.Items.Count - 1 foundrow = Me.DsClientes1.Tables(0).Rows.Find(Me.lstMessages.Items(i).ToString) If foundrow Is Nothing Then Me.lstMessages.Items(i) &= " - naum achou" Else Me.lstMessages.Items(i) &= " - achou heheh" End If Nextpara definir chave primaria: Dim keys(0) As DataColumn keys(0) = Me.DsClientes1.Tables(0).Columns("ClienteID") keys(0).Unique = True Me.DsClientes1.Tables(0).PrimaryKey = keysfalows, abs,t+ Compartilhar este post Link para o post Compartilhar em outros sites
asp.net 0 Denunciar post Postado Novembro 11, 2005 Será que não seria melhor eu setar o DataSource do meu listbox2 para esta DataTable que estou retornando? Assim ficaria faltando apenas como retirar os itens do listbox1. Compartilhar este post Link para o post Compartilhar em outros sites
eriva_br 7 Denunciar post Postado Novembro 11, 2005 pode crer, tb. pode ser... qq. coisa se você precisar pode fazer uma cópia do datatableé isso ae, por isso que existem 1000 maneiras de se fazer neston....falows,bom final de semana t+ Compartilhar este post Link para o post Compartilhar em outros sites
asp.net 0 Denunciar post Postado Novembro 12, 2005 Mas e no caso como posso compara os valores do DataTable com os itens do meu ListBox? Compartilhar este post Link para o post Compartilhar em outros sites
Graymalkin 0 Denunciar post Postado Novembro 12, 2005 Mas e no caso como posso compara os valores do DataTable com os itens do meu ListBox?O que são os "itens" do seu ListBox? Com a possibilidade de se colocar objetos dentro da ListBox faz-se necessário especificar isso. E, também seria interessante, especificar o que está na seu DataTable.Abraços,Graymalkin Compartilhar este post Link para o post Compartilhar em outros sites
asp.net 0 Denunciar post Postado Novembro 14, 2005 No primeiro post eu disse, mas vamos lá.Meu DataTable é o resultado de um Select no banco, guardando o campo ID do registro no banco. Já no listbox tenho também preenchido com o resultado do banco, guardando os valores ID e nome do cliente. A diferença é que no DataTable tenho apenas os clientes que forão previamente selecionados numa outra página. e no listBox, tenho todos os indices do banco. Compartilhar este post Link para o post Compartilhar em outros sites
Graymalkin 0 Denunciar post Postado Novembro 14, 2005 No primeiro post eu disse, mas vamos lá.Meu DataTable é o resultado de um Select no banco, guardando o campo ID do registro no banco. Já no listbox tenho também preenchido com o resultado do banco, guardando os valores ID e nome do cliente. A diferença é que no DataTable tenho apenas os clientes que forão previamente selecionados numa outra página. e no listBox, tenho todos os indices do banco.Ah, então você pode fazer assim:Dim linha As DataRow Dim item As ListItem For Each linha In dt.Rows For Each item In ListBox1.Items If linha("Código") = item.Value Then item.Selected = True End If Next NextOnde "dt" é a sua DataTable, "ListBox1" sua ListBox. E, troque também o nome do campo (que no caso ali é "Código") pelo campo da tabela que corresponde ao valor do item da listbox.Abraços,Graymalkin Compartilhar este post Link para o post Compartilhar em outros sites
asp.net 0 Denunciar post Postado Novembro 22, 2005 beleza, consegui. Agora e para que usando este resultado eu possa excluir os items deste mesmo listbox? Estou fazendo assim: for each linhas in dt_clientes.rows For each elemento in lb_clientes.Items if linhas(1) = elemento.value then elemento.Selected = true lb_clientes.Items.Remove(lb_clientes.SelectedItem) end if next next Só que estou recebendo como erro a mensagem abaixo Server Error in '/portobelo' Application. -------------------------------------------------------------------------------- Collection was modified; enumeration operation may not execute. Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. Exception Details: System.InvalidOperationException: Collection was modified; enumeration operation may not execute. Source Error: Line 636: 'lb_clientes.Items.Remove(lb_clientes.SelectedItem) Line 637: end if Line 638: next Line 639: next Line 640: Source File: D:\sistemas\porto_belo\centroprocesso.ascx Line: 638 Compartilhar este post Link para o post Compartilhar em outros sites
Graymalkin 0 Denunciar post Postado Novembro 23, 2005 Sim, você não pode remover itens de uma coleção dentro de uma iteração, já que perde-se a enumeração original. O que você poderia fazer ali é um while para remover os itens até que não haja nenhum item selecionado (ou seja, até que o loop percorra a lista e chegue no final sem que haja algum selecionado).Certo? ;) Graymalkin Compartilhar este post Link para o post Compartilhar em outros sites
asp.net 0 Denunciar post Postado Novembro 23, 2005 Resolvi fazendo assim, depois do comando de deleção, mando sair do loppinglb_clientes.Items.Remove(lb_clientes.SelectedItem)exit for Compartilhar este post Link para o post Compartilhar em outros sites