elwissan Postado Fevereiro 13, 2008 Denunciar Share Postado Fevereiro 13, 2008 Ajuda.... :unsure: Eu preenchi um DataGridview com texto comum (sem estar vinculado ao um banco de dados).Como eu faço para localizar um texto no Grid?Exemplo: O Grid foi preenchido com vários nomes de empresas, agora eu quero localizar uma empresa específica.Obrigado. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 quintelab Postado Fevereiro 16, 2008 Denunciar Share Postado Fevereiro 16, 2008 Como você preencheu manualmente, seria mais fácil alimentar um DataSet, e fazer sua busca no DataSet.Abraços... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Graymalkin Postado Fevereiro 17, 2008 Denunciar Share Postado Fevereiro 17, 2008 Percorra a coleção Rows da DataGridView, que é a coleção de linhas exibidas. Dependendo de como você preencheu você poderá usar a propriedade DataBoundItem para obter o objeto correspondente e fazer as devidas verificações.Abraços,Graymalkin Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 elwissan Postado Fevereiro 18, 2008 Autor Denunciar Share Postado Fevereiro 18, 2008 Percorra a coleção Rows da DataGridView'você quer dizer isso?Dir_DBGrid = Tabela 1GridPesq = Tabela 2Dim i As Integer For i = 0 To Dir_DBGrid.Rows.Count - 1 If Dir_DBGrid.Rows(i).Cells(0).Value = GridPesq.CurrentRow.Cells(5).Value Then 'Caso for igual ''Dir_DBGrid.Rows(i).Cells(0).Value = "c:\Iamgens\EmpresaX" (Diretório) ''GridPesq.CurrentRow.Cells(1).Value = "Imagem01.jpg" PictureBox1.Load(Dir_DBGrid.Rows(i).Cells(0).Value & "\" & GridPesq.CurrentRow.Cells(1).Value) ''É exibido a imagem. Exit For End If Next i ' Até aqui tudo bem mas se eu tiver uns cinco mil itens? Toda vez em que navegar ele vai fazer isso e vai demorar muito para achar o item, então tem de ser de outra maneira.- x - x - x - x - x - x - x - x - x - x - x - x - x - x - x - x - x - x - x - x - x - x - x - x - x - x - x - x - x - x - x - x Visão geral e explicação:Por enquanto, eu criei dois arquivos .txt somente para serem carregados nos DataGrid para poder desenvolver sem ter de criar logo de “cara” o banco de dados. Tenho a intenção de criá-lo por último ou tentar evitar até não dar mais.Estou trabalhando com um banco de dados e duas tabelas.São dois DataGrid que estou usando:O primeiro Grid tem duas colunas comuns que são: Nome da empresa e Diretório (que é o caminho da imagem para ser exibido na PictureBox ).O Segundo Grid, terá umas cinco colunas e entre elas uma coluna no formato ComboBox com o nome de Nome da Empresa.Detalhe: Este comboBox terá em sua lista todos os itens do campo Nome da empresa do primeiro Grid. Tenho que associar os dois campos Nome da Empresa de cada tabela para que cada vez em que eu navegar pelo segundo Grid, possa encontrar o caminho no primeiro Grid e carregar a imagem na PictureBox (um visualizador).Como o banco de dados ainda não foi criado, estou tentando usar o máximo dos códigos sem ter que usar os recursos dos bandos de dados. Claro tem hora que não dá mais e é bem melhor usar os recursos que eles oferecem.Não é necessário as tabelas estarem vinculadas, basta eu associar de alguma forma, ou seja, localizando através do nome da empresa ou pelo index do item (associo através do index e depois crio a linha de comando).O que vocês sugerem? Ou é melhor usar os recursos do banco de dados?Obrigado até mais. :)Acho melhor ler tudo para entender a primaira parte do que eu escrevi.Desculpe. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Graymalkin Postado Fevereiro 21, 2008 Denunciar Share Postado Fevereiro 21, 2008 Até aqui tudo bem mas se eu tiver uns cinco mil itens? Toda vez em que navegar ele vai fazer isso e vai demorar muito para achar o item, então tem de ser de outra maneira.A menos que isso vá ser executado em um computador bem velhinho, percorrer 5000 mil linhas, dependendo da condição a ser executada, é tranquilo. Em todo caso, também pode-se usar uma busca binária, caso os dados estejam em ordem.Todavia, acho que um banco de dados (mesmo que seja o Access) é sempre bem-vindo. :)Abraços,Graymalkin Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 sidneimarques Postado Março 4, 2008 Denunciar Share Postado Março 4, 2008 amigos, tentei usar este exemplo mas não deu certo, então tentei fazer assim: Public Sub pesquisaCliente() Dim texto As String = Nothing If frmClientes.txtNomePesq.Text <> String.Empty Then 'percorre cada linha do DataGridView For Each linha As DataGridViewRow In frmClientes.DataGridView1.Rows 'percorre cada célula da linha For Each celula As DataGridViewCell In frmClientes.DataGridView1.Rows(linha.Index).Cells 'se a coluna for a coluna 1 (Nome) então verifica o criterio If celula.ColumnIndex = 1 Then texto = celula.Value.ToString 'se o texto informado estiver contido na célula então seleciona toda linha If texto.Contains(frmClientes.txtNomePesq.Text) Then 'seleciona a linha frmClientes.DataGridView1.CurrentCell = celula Exit Sub End If End If Next Next End If End Sub funciona, mas se eu digito uma sequencia de dados tipo "aa" ele retorna o erro: System.NullReferenceException was unhandled Message="Object reference not set to an instance of an object."isso é porque não encontro nada... como faço pra ignorar isso ? valeudetalhe, estouchamando essa função no changed de um textbox no mesmo form Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Graymalkin Postado Março 4, 2008 Denunciar Share Postado Março 4, 2008 E em qual linha ocorre o erro?Ah, e você não precisa percorrer todas as células se quer procurar em uma coluna específica. Basta usar a propriedade Cells diretamente.Abraços,Graymalkin Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 sidneimarques Postado Março 4, 2008 Denunciar Share Postado Março 4, 2008 Graymalkin, a linha é texto = celula.Value.ToString.ToLoweré eu estive olhando e realmente só preciso pesquisar na coluna nome....como ficaria então ? valeu pela ajuda! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Graymalkin Postado Março 4, 2008 Denunciar Share Postado Março 4, 2008 Eu costumo colocar objetos na DataGridView, então para buscar bastaria percorrer as linhas verificando a propriedade Nome de cada objeto. Mas, no seu caso você está olhando o texto das células, então ficaria algo como:Dim texto As String = Nothing If frmClientes.txtNomePesq.Text <> String.Empty Then 'percorre cada linha do DataGridView For Each linha As DataGridViewRow In frmClientes.DataGridView1.Rows celula = linha(1) 'Índice 1 = coluna nome texto = celula.Value.ToString().ToLower() 'se o texto informado estiver contido na célula então seleciona toda linha If texto.Contains(frmClientes.txtNomePesq.Text) Then 'seleciona a linha frmClientes.DataGridView1.CurrentCell = celula Exit Sub End If Next End If Quanto ao erro, talvez alguma célula sua esteja com um valor nulo, então seria bom fazer uma verificação do tipo: if celula.value isnot nothing then texto = celula.value.tostring().tolower() else texto = "" endifCerto? ;)Graymalkin Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 sidneimarques Postado Março 4, 2008 Denunciar Share Postado Março 4, 2008 (editado) ok, mas a variável célula estava declarada já no for each... agora ela não existe mais... e agora ? :huh: percebi também que o erro dá quando tem nome e sobrenome e pesquiso só pelo nome...valeu Editado Março 4, 2008 por sidneimarques Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Graymalkin Postado Março 5, 2008 Denunciar Share Postado Março 5, 2008 ok, mas a variável célula estava declarada já no for each... agora ela não existe mais... e agora ? :huh:É só declará-la lá no início: :rolleyes: Dim celula As DataGridViewCellpercebi também que o erro dá quando tem nome e sobrenome e pesquiso só pelo nome...Qual o erro que dá e em qual linha?Abraços,Graymalkin Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 sidneimarques Postado Março 7, 2008 Denunciar Share Postado Março 7, 2008 olha só... [quote]Public Sub pesquisaCliente() Dim texto As String = Nothing Dim celula As DataGridViewCell 'percorre cada linha do DataGridView For Each linha As DataGridViewRow In frmClientes.DataGridView1.Rows celula = linha.Cells(1) 'Índice 1 = coluna nome texto = celula.Value.ToString().ToLower() If texto = Nothing Then Exit Sub End If 'se o texto informado estiver contido na célula então seleciona toda linha If texto.Contains(frmClientes.txtNomePesq.Text) Then 'seleciona a linha frmClientes.DataGridView1.CurrentCell = celula Exit Sub End If Next End Sub [/quote]funciona, percorre cada linha do datagridview, somente na coluna nome, isso tá ok...mas quando chega na última linha, que é null ele dá o erro citado acima (NullreferenceException Unhandled)... tem como colocar uma condição pra quando chegar ao fim das linhas ele parar ? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 sidneimarques Postado Março 8, 2008 Denunciar Share Postado Março 8, 2008 Consegui resolver... achei que ficou P.O.G(para quem não sabe o que é POG, clique aqui) .... :D mas funciona!!! olha o que eu fiz:Coloquei um contador, uma variavel que ao se igualar ao numero de registros, sai da sub... porque o erro dava quando ele tentava vrificar o registro depois do último e era null, então deixei a função assim... quem quiser usar, funciona! Ao digitar um nome numa caixa de texto... ele seleciona a linha correspondente no datagridview... Dim texto As String = Nothing Dim celula As DataGridViewCell Dim contagem As Integer 'percorre cada linha do DataGridView For Each linha As DataGridViewRow In frmClientes.DataGridView1.Rows celula = linha.Cells(1) 'Índice 1 = coluna nome texto = celula.Value.ToString().ToLower() 'se o texto informado estiver contido na célula então seleciona toda linha If texto.Contains(frmClientes.txtNomePesq.Text) Then 'seleciona a linha frmClientes.DataGridView1.CurrentCell = celula Exit Sub End If contagem = contagem + 1 If contagem = frmClientes.DataGridView1.RowCount - 1 Then Exit Sub End If NextAgora to com outra dúvida, após cadastrar um registro, coloquei uma decisão... se o usuario deseja cadastrar outro cliente, se sim, limpa os campos do form e inicia um novo cadastro, se não mostra o datagridview, o problema é que quando mostra o datagridview ele não se atualiza automaticamente com o último registro cadastrado... tentei datagridview.refresh, mas não deu... alguma ajudinha ?valeu!!! :) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Graymalkin Postado Março 8, 2008 Denunciar Share Postado Março 8, 2008 Acho que para evitar a POG você poderia testar se o "celula" é nulo (Nothing, através do operador IsNot), antes de efetivamente usá-la.Quanto a sua nova dúvida, acho que você tem que associar novamente os dados à DataGridView.Abraços,Graymalkin Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
elwissan
Ajuda.... :unsure:
Eu preenchi um DataGridview com texto comum (sem estar vinculado ao um banco de dados).
Como eu faço para localizar um texto no Grid?
Exemplo: O Grid foi preenchido com vários nomes de empresas, agora eu quero localizar uma empresa específica.
Obrigado.
Link para o comentário
Compartilhar em outros sites
13 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.