DATAGRIDVIEW - FILTRAR DADOS DE TRÊS TABELAS

SANROMAN 01/08/2014 01:49:46
#440100
Boa Noite.

Tenho que popular um datagridview com seis colunas: Banco, Data, Tipo, Nº Doc, Descrição e Valor. Cada coluna recebe dados de várias tabelas.
Ex.: A Coluna Data pode receber dados de todas as tabelas com campo data. O mesmo vale para as outras colunas.
Uso o seguintte código:


Private Sub btnDataGridCC_Click(sender As Object, e As EventArgs) Handles btnDataGridCC.Click

Dim sqlCon As New SqlConnection(strCmd)
Dim strSql As String = [Ô]Select TB_Banco.Banco, TB_Cheque.Data, TB_Cheque.Tipo, TB_Cheque.NumeroCheque, TB_Cheque.Valor, [Ô] & _
[Ô]TB_Deposito.Data, TB_Deposito.Tipo1, TB_Deposito.NumDoc, TB_Deposito.Valor [Ô] & _
[Ô]FROM TB_Banco [Ô] & _
[Ô]INNER JOIN TB_Cheque ON TB_Banco.Banco = TB_Cheque.Banco [Ô] & _
[Ô]INNER JOIN TB_Deposito ON TB_Banco.Banco = TB_Deposito.Banco [Ô] & _
[Ô]WHERE TB_Cheque.Banco = [ô][Ô] & txtBancoPrincipal.Text & [Ô][ô][Ô]

Dim sqlCmd As New SqlCommand(strSql, sqlCon)
Dim da As New SqlDataAdapter(sqlCmd)
Dim dt As DataTable = New DataTable([Ô]ContaCorrente[Ô])
dgvContaCorrente.Columns.Clear()

da.Fill(dt)

With dgvContaCorrente

.ColumnCount = 6
.AutoGenerateColumns = False
.Columns(0).Name = [Ô]Banco[Ô]
.Columns(1).Name = [Ô]Data[Ô]
.Columns(2).Name = [Ô]Tipo[Ô]
.Columns(3).Name = [Ô]Nº Doc[Ô]
.Columns(4).Name = [Ô]Descrição[Ô]
.Columns(5).Name = [Ô]Valor[Ô]
.Columns(0).Width = 50
.Columns(1).Width = 79
.Columns(2).Width = 79
.Columns(3).Width = 79
.Columns(4).Width = 155
.Columns(1).Width = 80
.Columns(0).HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter
.Columns(1).HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter
.Columns(2).HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter
.Columns(3).HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter
.Columns(4).HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter
.Columns(5).HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter
.Columns(0).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft
.Columns(1).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft
.Columns(2).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft
.Columns(3).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
.Columns(4).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft
.Columns(5).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
.AllowUserToAddRows = False
.AllowUserToDeleteRows = False
.AllowUserToOrderColumns = False
.AllowUserToResizeColumns = False
.AllowUserToResizeRows = False

End With

dgvContaCorrente.DataSource = dt

End Sub


O datagridview é montado com o total de linhas correto mas os dados não aparecem.

Espero que possam me ajudar.
OMAR2011 01/08/2014 14:37:31
#440112
Vamos lá.
Usei o Access para fazer o teste.
.AutoGenerateColumns = False tem que ser true.
Código para dar nome as colunas e outros não está compatível. Faça de forma manual.
Quantas as tabelas!!!!!!!!!!!!!!!!
Acho melhor rever seu conceito.

SANROMAN 01/08/2014 15:02:21
#440113
Olá OMAR

Se coloco AutoGenerateColumns = False como True O Datagridview e populado com os valores de cada select da minha consulta e não é o que quero

O código para dar nome as colunas é porque tenho que entrar com os valores da consulta por data, mesclando as tabelas, como se fosse um formulário de conta corrente bancário que vemos nos sites. Pode ser que tal dia não tenha depósitos e só cheques emitidos e vice-versa.

Andei pesquisando que é possível através de um datatable usar a mesma coluna para dados de tabelas diferentes. o problema é como fazer isso.

Se tiver alguma ideia para que eu possa chegar ao resultado desejado, fique a vontade para opinar.

Mas chegamos lá. Muito obrigado pela atenção.
PEGUDO 01/08/2014 15:12:42
#440114
Resposta escolhida
Cara,
Vou te ser sincero: nunca consegui popular o DataGridView assim em WindosForm.

Eu faço assim:

DataGridView1.Rows.Add(valor1, valor2, valor3, valor4, valor5)


Claro que, no exemplo acima, se o DataGridView tiver 4 colunas vai dar erro.
Então a quantidade de valores tem que ser igual à quantidade de colunas do DataGridView.

No se caso, você vai ter que fazer um For Each no DataTable, por exemplo:

For Each linha As DataRow In DataTable.Tables(0).Rows
DataGridView1.Rows.Add(linha.Item(0), linha.Item(1), linha.Item(2), linha.Item(3), linha.Item(4))
Next


Cara, não estou usando o VS mas espero que ajude.
OMAR2011 01/08/2014 16:03:37
#440115
De novo.
Rever conceitos.
Tudo indica que,
TB_Banco.Banco = parece texto, campo da tabela.
TB_Deposito.Banco = parece texto, campo da tabela.
TB_Cheque.Banco =parece texto campo, da tabela
Repetindo o mesmo nome em várias tabelas.
Coloque na sua consulta aquilo que vai aparecer no datagridview.
Escolhe os campos que vão aparecer
Data existe dois.
Valor existe dois.
Restringe aquilo que vai aparecer.
SANROMAN 19/08/2014 17:43:29
#440598
Olá amigos


Usei como exemplo a dica do PEGUDO para popular datagrid.

E também revi meus conceitos a respeito de montar o datagrid

Estou dando como encerrado o tópico

Muito obrigado pela ajuda
Tópico encerrado , respostas não são mais permitidas