Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Alexandre Carmo

[Resolvido] Capturar dados no grid para crystal

Recommended Posts

Boa tarde

 

Estou precisando pegar os dados de um datagridview e colocar no meu cystal. os dados do grid estão em outro form, dados comum como textbox, label eu consigo mas o grid da erro, vejam como fiz:

Aqui pego dados comum do outro form e exibo no crystal:

Dim param1Fileds As New CrystalDecisions.Shared.ParameterFields()
   Dim param1Field As New CrystalDecisions.Shared.ParameterField()
   Dim param1Range As New CrystalDecisions.Shared.ParameterDiscreteValue()
   Dim CRYRpt1 As New CrystalReport2()


param1Field.ParameterFieldName = "teste" ' Parameter Name In Crystal Report
   param1Range.Value = Form2.TextBox1.Text
   param1Field.CurrentValues.Add(param1Range)
   param1Fileds.Add(param1Field) 'To add parameter in parameterslist


   crv.ParameterFieldInfo = param1Fileds 'to pass parameter inf.to CRV
   crv.ReportSource = CRYRpt1    ' Assign Report Source to CRV
End Sub

 

Este é o que estu tentando pegar dados do grid:

CRYRpt1.SetDataSource(Form2.DataGridView1.DataSource)

 

Porém me apresenta o seguinte erro:

O relatório não tem tabelas.

Onde estou errando?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde

 

 

 

Pessoal pesquisei igual loco e consegui resolver o problema.

 

Para carregar os dados do gridview funciona da seguinte forma:

 

Eu estava errando pois estava criando um dataset direto sem indicar uma datable, então adicionei um dataset na minha aplicação e adicionei um datatable com a quantidade de colunas que precisava, feito isso adicionei esse dataset no arquivo .rpt e adicionei as colunas no relatório.

 

Depois disso segue os dados de exemplo:

 

Form2:

Public Class Form2
 Private Sub Form2_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
   Dim ds As New DataSet()
   Dim ExecutarStringSQL As New QuerySQL
   ds = ExecutarStringSQL.BuscarDados("SELECT studentID, firstName, lastName, birthDate,address, contactNo FROM studentInfo")
   Dim CRYRpt1 As New CrystalReport2()
   DataGridView1.DataSource = ds.Tables(0)

 End Sub
 Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
   Dim f As New Form3
   f.Show()
 End Sub
End Class

Dados do form3:

Public Class Form3
 Private Sub Form3_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load

   Dim param1Fileds As New CrystalDecisions.Shared.ParameterFields()
   Dim param1Field As New CrystalDecisions.Shared.ParameterField()
   Dim param1Range As New CrystalDecisions.Shared.ParameterDiscreteValue()
   Dim CRYRpt1 As New CrystalReport2()

   Dim ds As New DataSet1

     ' add rows to the table 
   Dim dr1 As DataRow
   For i As Integer = 0 To Form2.DataGridView1.RowCount - 1
     dr1 = ds.Tables(0).NewRow
     For j As Integer = 0 To Form2.DataGridView1.Columns.Count - 1
       dr1(j) = Form2.DataGridView1.Rows(i).Cells(j).FormattedValue
     Next
     ds.Tables(0).Rows.Add(dr1)
   Next
   param1Field.ParameterFieldName = "TesteCampo" ' Parameter Name In Crystal Report
   param1Range.Value = Form2.TextBox1.Text
   param1Field.CurrentValues.Add(param1Range)
   param1Fileds.Add(param1Field) 'To add parameter in parameterslist


   crv.ParameterFieldInfo = param1Fileds 'to pass parameter inf.to CRV
   CRYRpt1.SetDataSource(ds.Tables(0))
   crv.ReportSource = CRYRpt1    ' Assign Report Source to CRV

 End Sub
End Class

Pronto com isso qualquer informação que tenho no daragrid será exibida no crystal.

 

Para adicionar dados do form como valores do textbox do form1 por exemplo, basta antes ir no cristal e adicionar um "ParameteField" e dar um nome para ele, no meu exemplo acima o nome é TesteCampo, e ele exibe no crystal os dados do textbox1 do form2.

 

Espero que ajude alguém

Se alguém souber melhorar isso fico grato

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.