USAR FOR EM DETERMINADAS LINHAS DO DATAGRIDVIEW

VARUS 09/09/2016 17:18:05
#466674
Boa tarde,

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?
KERPLUNK 09/09/2016 17:32:07
#466676
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!
ASHKATCHUP 09/09/2016 17:37:14
#466677
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.
VARUS 09/09/2016 17:49:26
#466679
Sua paciência é incrível AUHSUASUASUAUSA

então.. eu queria rodar nas linhas que encontrei contendo todos os dados ainda no grid
ASHKATCHUP 09/09/2016 17:55:49
#466681
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
KERPLUNK 09/09/2016 18:19:16
#466683
Resposta escolhida
Pela segunda vez: O grid é a representação de dados. Passo à passo:
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.
VARUS 09/09/2016 18:44:34
#466685
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?
KERPLUNK 09/09/2016 19:00:27
#466687
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?
VARUS 09/09/2016 20:13:33
#466692
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

  public class Dados
{
public int Codigo {get;set;}
public string Descricao [get; set;}
public DateTime Data {get; set;}
}
ASHKATCHUP 09/09/2016 21:12:10
#466694
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