USAR FOR EM DETERMINADAS LINHAS DO DATAGRIDVIEW
Boa tarde,
Eu utilizo um for pra rodar as linhas do grid e então criar [Ô]padrões[Ô] ex;
Private WithEvents pd As UserControl1
é dessa forma que crio os padrões, e para pesquisar outros registros, eu dou um select novamente no banco de dados e chamo esse evento pra criar os padrões.
A duvida é, como faço para localizar os controles no grid em precisar dar um select com Where no banco novamente??
pra pesquisar valores no grid, eu faço assim:
para chamar a pesquisa;
alguém tem alguma ideia, para rodar as linhas que foram encontradas na pesquisa? e criar os padrões?
Eu utilizo um for pra rodar as linhas do grid e então criar [Ô]padrões[Ô] ex;
Private WithEvents pd As UserControl1
Dim Total As Integer = DataGridView1.RowCount -1
For i = 0 To Total
pd = New UserControl1
DataGridView1.CurrentCell = DataGridView1.Rows(i).Cell(0)
pd.label1.text = DataGridView1.CurrentRow.Cell(2).Value
Flow1.Controls.Add(pd)
Next
é dessa forma que crio os padrões, e para pesquisar outros registros, eu dou um select novamente no banco de dados e chamo esse evento pra criar os padrões.
A duvida é, como faço para localizar os controles no grid em precisar dar um select com Where no banco novamente??
pra pesquisar valores no grid, eu faço assim:
Function PesquisaGRID(D As String, G As DataGridView, C As String) As Boolean
[ô] D = O que é pra pesquisar
[ô] G = Em qual GRID pesquisar
[ô] C = Em qual coluna pesquisar
Try
Dim str As String
Dim Pesquisa As String = D [ô]O QUE é PRA SER PESQUISADO
Dim ResultP As Boolean = False
For Each linha As DataGridViewRow In G.Rows
If Not linha.IsNewRow Then
str = UCase(linha.Cells(C).Value.ToString)
If str.Equals(Pesquisa.ToUpper) Then
G.CurrentCell = linha.Cells(C)
[ô]Achou
ResultP = True
End If
Else
[ô]Não Achou
ResultP = False
End If
Next
Return ResultP
Catch ex As Exception
MsgBox([Ô]Erro ao pesquisar [Ô] & vbNewLine & vbNewLine & ex.ToString)
End Try
End Function
para chamar a pesquisa;
PesquisaGRID([Ô]João[Ô], DataGridView1, [Ô]clientes[Ô])
alguém tem alguma ideia, para rodar as linhas que foram encontradas na pesquisa? e criar os padrões?
Parabéns! Você é o usuário de número 1000 que vou dizer a mesma coisa:
O grid é simplesmente a representação dos dados, você não pesquisa o grid, você pesquisa os dados. Você pode simplesmente criar uma classe, em seguida uma List<T> dessa classe, adicionar a List<T> ao grid e se quiser fazer algo relacionado aos dados(como uma pesquisa) você busca novamente os dados usando um simples cast no seu DataSource.
Como eu sei que tudo isso deve soar como grego pra você e que não importa o quanto eu explique, você vai querer um exemplo. Tenho um que passo todas as vezes e está em anexo. Divirta-se!
O grid é simplesmente a representação dos dados, você não pesquisa o grid, você pesquisa os dados. Você pode simplesmente criar uma classe, em seguida uma List<T> dessa classe, adicionar a List<T> ao grid e se quiser fazer algo relacionado aos dados(como uma pesquisa) você busca novamente os dados usando um simples cast no seu DataSource.
Como eu sei que tudo isso deve soar como grego pra você e que não importa o quanto eu explique, você vai querer um exemplo. Tenho um que passo todas as vezes e está em anexo. Divirta-se!
Citação::
Parabéns! Você é o usuário de número 1000 que vou dizer a mesma coisa:
Concordo com tudo dito pelo KERPLUNK.
O ideal sempre é sempre ter uma variável (List, como dito), armazenando o conteúdo que está no Grid. E, ai, as pesquisas devem ser feitas nessa List<>, o que é infinitamente mais rápido do que uma busca diretamente no Grid.
Sua paciência é incrÃvel AUHSUASUASUAUSA
então.. eu queria rodar nas linhas que encontrei contendo todos os dados ainda no grid
então.. eu queria rodar nas linhas que encontrei contendo todos os dados ainda no grid
Seria +- isso?
Function PesquisaGRID(D As String, G As DataGridView, C As String) As Boolean
[ô] D = O que é pra pesquisar
[ô] G = Em qual GRID pesquisar
[ô] C = Em qual coluna pesquisar
Try
Dim str As String
Dim Pesquisa As String = D [ô]O QUE é PRA SER PESQUISADO
Dim ResultP As Boolean = False
For Each linha As DataGridViewRow In G.Rows
If Not linha.IsNewRow Then
str = UCase(linha.Cells(C).Value.ToString)
If str.Equals(Pesquisa.ToUpper) Then
G.CurrentCell = linha.Cells(C)
[ô]Achou
ResultP = True
[ô]
pd = New UserControl1
pd.label1.text = G;CurrentR.Cell(2).Value
Flow1.Controls.Add(pd)
pd = Nothing
End If
Else
[ô]Não Achou
ResultP = False
End If
Next
Return ResultP
Catch ex As Exception
MsgBox([Ô]Erro ao pesquisar [Ô] & vbNewLine & vbNewLine & ex.ToString)
End Try
End Function
Pela segunda vez: O grid é a representação de dados. Passo à passo:
Criando a classe que será exibida no grid:
Criando uma lista dos dados:
Passa-se os Ãtens para o grid e o preenchimento é automático:
Usando o seu exemplo, selecionando os dados onde a propriedade [Ô]Descricao[Ô] contenham a palavra [Ô]Outra[Ô]:
Só para reforçar:
O grid é só a exibição dos dados, não pesquise nele, pegue os dados e trabalhe com os dados.
O grid é só a exibição dos dados, não use qualquer tipo de loop nele(como um [Ô]for...next[Ô], por exemplo), não pesquise no grid, pesquise nos dados.
Criando a classe que será exibida no grid:
public class Dados
{
public int Codigo {get;set;}
public string Descricao [get; set;}
public DateTime Data {get; set;}
}
Criando uma lista dos dados:
List<Dados> itens = new List<Dados>();
items.Add(new Dados(){ Codigo = 1, Descricao = [Ô]Alguma coisa[Ô]. Data = DateTime.Now});
items.Add(new Dados(){ Codigo = 2, Descricao = [Ô]Outra coisa[Ô]. Data = DateTime.Now});
items.Add(new Dados(){ Codigo = 3, Descricao = [Ô]Qualquer coisa[Ô]. Data = DateTime.Now});
items.Add(new Dados(){ Codigo = 2, Descricao = [Ô]Outra coisa qualquer[Ô]. Data = DateTime.Now});
Passa-se os Ãtens para o grid e o preenchimento é automático:
dataGridView1.DataSource = dados;
Usando o seu exemplo, selecionando os dados onde a propriedade [Ô]Descricao[Ô] contenham a palavra [Ô]Outra[Ô]:
//Criando a lista com os dados à serem trabalhados:
List<Dados> selecionados = ((List<Dados>)dataGridView1.DataSource).Where(x => x.Descricao.Contains([Ô]Outra[Ô]));
//Aqui, a variável [Ô]selecionados[Ô] deve conter dois Ãtens que você pode trabalhar da maneira que quiser:
foreach (Dados item in selecionados)
{
MessageBox.Show(item.Descricao);
}
Só para reforçar:
O grid é só a exibição dos dados, não pesquise nele, pegue os dados e trabalhe com os dados.
O grid é só a exibição dos dados, não use qualquer tipo de loop nele(como um [Ô]for...next[Ô], por exemplo), não pesquise no grid, pesquise nos dados.
Vlw KERPLUNK (agradeço a paciência), vlw ASHKATCHUP
to usando seu exemplo KERP, más, porque exatamente não posso usar loop no grid?
to usando seu exemplo KERP, más, porque exatamente não posso usar loop no grid?
Citação::to usando seu exemplo KERP, más, porque exatamente não posso usar loop no grid?
Muito simples: O grid é só a exibição dos dados
Pense no que isso significa:
1 - O que você está vendo na tela é simplesmente a representação de uma lista de dados. O grid é o objeto que os exibe. Imagine um browser(navegador) por exemplo. Ele é a representação de dados HTML/CSS, se você quer exibir coisas diferentes na tela, você não muda a tela, você muda o HTML. Nessa comparação, o grid é o browser, e o HTML, os dados exibidos
2 - Ao fazer loops em objetos que utilizam recursos gráficos(como o grid), para cada interação do loop, além da célula, todos as classes relacionadas à exibição são instanciadas. Em um grid pequeno de uns 100 itens, não se nota, mas conforme o grid fica maior(com mais itens), esse for vai ficar cada vez mais lento.
3 - Com uma List<T>, você terá objetos muito mais enxutos, cada um deles pode conter seus próprios métodos, propriedades e eventos. Além das inúmeras possibilidades de se trabalhar com List<T>, como por exemplo, todos os métodos estendidos, como Where(), First(), OrderBy(), Join(), Group(), basicamente você faz tudo que se faz com SQL, mas diretamente nos objetos. Pode-se usar esses métodos que falei com parâmetros de funções anônimas(expressões lambda) ou até mesmo LINQ se assim preferir.
4 - O mais importante: é assim que deve ser feito, é assim que é. é dessa forma que um profissional de verdade deve fazer. E olha que isso é o mÃnimo.
Muitos são os casos de empresas que contratam programadores baseados na qualidade de código(e pagam mais conforme o nÃvel). Então imagine você fazendo um teste ou mesmo disputando um cliente com um concorrente seu. Um método como esse que você escreveu, seria considerado muito abaixo do mÃnimo e você descartado na hora.
A coisa vai além. OOP é [txt-color=#e80000]TUDO[/txt-color]. Todo o .NET Framework funciona baseado em OOP. é por não dominar OOP que você tem dificuldades de entender qualquer coisa, tudo parece um mistério. é incrÃvel o que acontece no [Ô]momento do estalo[Ô], que é o momento que você realmente entende do que se trata OOP. IMEDIATAMENTE você passa a entender absolutamente tudo. Seja C#, VB.NET, F#, Java, Python, Ruby, ou qualquer outra coisa, nada disso é mistério mais. Você passa a entender TUDO e a curva de aprendizado é drasticamente diminuÃda. Então, mais uma vez: Aprenda OOP, é a chave de todo o conhecimento de todas as linguagens modernas, TODAS. Depois de saber disso, está esperando o que para aprender OOP?
ultimas duvidas,
nos seus video-aulas, você usa o prop que automático escreve alinha, e no vb.net? como crio as propriedades na classe?
tentei usar conversor e não funcionou
nos seus video-aulas, você usa o prop que automático escreve alinha, e no vb.net? como crio as propriedades na classe?
tentei usar conversor e não funcionou
public class Dados
{
public int Codigo {get;set;}
public string Descricao [get; set;}
public DateTime Data {get; set;}
}
O snippet prop também funciona em VB.NET.
Private newPropertyValue As String
Public Property NewProperty() As String
Get
Return newPropertyValue
End Get
Set(ByVal value As String)
newPropertyValue = value
End Set
End Property
Tópico encerrado , respostas não são mais permitidas