PASSAR VALOR DA LINHA DO GRID COMO PARAMETRO PARA
Opa,primeiramente nao sei se este é o topico certo mas vamos la,bom estou ainda aprendendo sobre crystal,e tenho uma duvida,tenho um relatorio que gostaria de chama-lo atraves do click em um botao,
ate ai nenhuma novidade,porem nesta tela tenho um grid com os dados carregados,meu relatorio tem como parametro o codigo para trazer apenas o relatorio especifico,gostaria de fazer o seguinte o usuario clicaria na linha do grid que deseja e ao clicar para abrir o relatorio ele passaria como parametro para o relatorio a coluna do codigo,como eu consigo fazer isso???
ate ai nenhuma novidade,porem nesta tela tenho um grid com os dados carregados,meu relatorio tem como parametro o codigo para trazer apenas o relatorio especifico,gostaria de fazer o seguinte o usuario clicaria na linha do grid que deseja e ao clicar para abrir o relatorio ele passaria como parametro para o relatorio a coluna do codigo,como eu consigo fazer isso???
Seria a linha do datagrid que escolheu abaixo:
DataGridView1.SelectedCells(0).Value.ToString()
O selectedcells(0)significa que o ele vai pegar o valor da célula selecionada ou linha. o número 0 de selectedcells(0) é para pegar o valor da primeira coluna, mas se o valor for da segunda, vai ser 1 e assim por diante, sendo que a primeira coluna começa do 0. é isso que você vai fazer. No lugar de um textbox, você vai colocar o código acima. é somente isso.
DataGridView1.SelectedCells(0).Value.ToString()
O selectedcells(0)significa que o ele vai pegar o valor da célula selecionada ou linha. o número 0 de selectedcells(0) é para pegar o valor da primeira coluna, mas se o valor for da segunda, vai ser 1 e assim por diante, sendo que a primeira coluna começa do 0. é isso que você vai fazer. No lugar de um textbox, você vai colocar o código acima. é somente isso.
entendi Marcos,porem eu nao sei como faço a chamada dele no botao,pois dei uma pesquisada e todos que achei,eles passam para abrir a conexao ,e tal,mas eu ja tenho uma classe na minha aplicaçao que ja faz toda a comunicação com o banco,entao nao consegui entender como fazer ....
Coloque o código que citei dentro do botão de comando no evento click. Não tem nada de conexão, ele apenas pega o valor da célular selecionada.
Se você já tinha o parâmetro, no lugar que ia uma textbox ou combobox para a seleção de parâmetro é que vai ele.
DataGridView1.SelectedCells(0).Value.ToString()
ex:
os meus faço assim:com crystal Reports
Primeiro importo no namespace
Imports CrystalDecisions.Shared
Imports CrystalDecisions.CrystalReports.Engine
Sub Relatorio()
[ô] carrega o relatório desejado
Dim strReportName As String = [Ô]NomedoRelatorio[Ô] [ô]nome do relatório criado sem o .rpt
[ô]
[ô]define o caminho e nome do relatório
Dim strReportPath As String = My.Settings.Relatorios & strReportName & [Ô].rpt[Ô] [ô]Salvei o caminho do meu relatório no settings do vb.net
[ô]
[ô]verifiqa se o arquivo existe
If Not IO.File.Exists(strReportPath) Then
Throw (New Exception([Ô]Relatório não localizado :[Ô] & vbCrLf & strReportPath))
End If
[ô]
[ô]instancia o relatório e carrega
Dim CR As New ReportDocument
CR.Load(strReportPath)
[ô] atribui os parametros declarados aos objetos relacionados
Dim crParameterDiscreteValue As ParameterDiscreteValue
Dim crParameterFieldDefinitions As ParameterFieldDefinitions
Dim crParameterFieldLocation As ParameterFieldDefinition
Dim crParameterValues As ParameterValues
[ô]
[ô] Pega a coleção de parametros do relatorio
crParameterFieldDefinitions = CR.DataDefinition.ParameterFields
[ô]
[ô] define o primeiro parametro
[ô] - pega o parametro e diz a ela para usar os valores atuais
[ô] - define o valor do parametro
[ô] - inclui e aplica o valor
[ô] - repete para cada parametro se for o caso (não é o caso deste exemplo)
[ô]***********************************
[ô]***********************************
[ô]Parâmetro Situacao
crParameterFieldLocation = crParameterFieldDefinitions.Item([Ô]Codigo[Ô])[ô]Esse é o parâmetro criado no crystal reports no meu caso o código
crParameterValues = crParameterFieldLocation.CurrentValues
crParameterDiscreteValue = New CrystalDecisions.Shared.ParameterDiscreteValue
[ô]obtem o valor da caixa de texto
crParameterDiscreteValue.Value = DataGridView1.SelectedCells(0).Value.ToString() [ô]Aqui coloquei o que você quer
crParameterValues.Add(crParameterDiscreteValue)
crParameterFieldLocation.ApplyCurrentValues(crParameterValues)
[ô]**********************************
[ô] Define a fonte do controle Crystal Report Viewer como sendo o relatorio definido acima
CrystalReportViewer1.ReportSource = CR
End Sub
Se você já tinha o parâmetro, no lugar que ia uma textbox ou combobox para a seleção de parâmetro é que vai ele.
DataGridView1.SelectedCells(0).Value.ToString()
ex:
os meus faço assim:com crystal Reports
Primeiro importo no namespace
Imports CrystalDecisions.Shared
Imports CrystalDecisions.CrystalReports.Engine
Sub Relatorio()
[ô] carrega o relatório desejado
Dim strReportName As String = [Ô]NomedoRelatorio[Ô] [ô]nome do relatório criado sem o .rpt
[ô]
[ô]define o caminho e nome do relatório
Dim strReportPath As String = My.Settings.Relatorios & strReportName & [Ô].rpt[Ô] [ô]Salvei o caminho do meu relatório no settings do vb.net
[ô]
[ô]verifiqa se o arquivo existe
If Not IO.File.Exists(strReportPath) Then
Throw (New Exception([Ô]Relatório não localizado :[Ô] & vbCrLf & strReportPath))
End If
[ô]
[ô]instancia o relatório e carrega
Dim CR As New ReportDocument
CR.Load(strReportPath)
[ô] atribui os parametros declarados aos objetos relacionados
Dim crParameterDiscreteValue As ParameterDiscreteValue
Dim crParameterFieldDefinitions As ParameterFieldDefinitions
Dim crParameterFieldLocation As ParameterFieldDefinition
Dim crParameterValues As ParameterValues
[ô]
[ô] Pega a coleção de parametros do relatorio
crParameterFieldDefinitions = CR.DataDefinition.ParameterFields
[ô]
[ô] define o primeiro parametro
[ô] - pega o parametro e diz a ela para usar os valores atuais
[ô] - define o valor do parametro
[ô] - inclui e aplica o valor
[ô] - repete para cada parametro se for o caso (não é o caso deste exemplo)
[ô]***********************************
[ô]***********************************
[ô]Parâmetro Situacao
crParameterFieldLocation = crParameterFieldDefinitions.Item([Ô]Codigo[Ô])[ô]Esse é o parâmetro criado no crystal reports no meu caso o código
crParameterValues = crParameterFieldLocation.CurrentValues
crParameterDiscreteValue = New CrystalDecisions.Shared.ParameterDiscreteValue
[ô]obtem o valor da caixa de texto
crParameterDiscreteValue.Value = DataGridView1.SelectedCells(0).Value.ToString() [ô]Aqui coloquei o que você quer
crParameterValues.Add(crParameterDiscreteValue)
crParameterFieldLocation.ApplyCurrentValues(crParameterValues)
[ô]**********************************
[ô] Define a fonte do controle Crystal Report Viewer como sendo o relatorio definido acima
CrystalReportViewer1.ReportSource = CR
End Sub
Marcos ,valeu cara funcionou certinho,mas tenho uma duvida:
eu especifiquei o caminho do relatorio desta maneira: [Ô]C:\Documents and Settings\informatica2\Meus documentos\Visual Studio 2008\Projects\Projeto Engenharia2\Projeto Engenharia2\Relatorios[Ô] & [Ô]\[Ô] & strReportName & [Ô].rpt[Ô]
porem ,quando eu publicar a minha aplicação ele vai conseguir importar o relatorio,ou eu devo mudar este caminho??
eu especifiquei o caminho do relatorio desta maneira: [Ô]C:\Documents and Settings\informatica2\Meus documentos\Visual Studio 2008\Projects\Projeto Engenharia2\Projeto Engenharia2\Relatorios[Ô] & [Ô]\[Ô] & strReportName & [Ô].rpt[Ô]
porem ,quando eu publicar a minha aplicação ele vai conseguir importar o relatorio,ou eu devo mudar este caminho??
deve salvar o settings do vb, aà é só alterar lá. Ex:
Vá no menu Projects>Properties
clique no lado esquerdo na aba [Ô]Settings[Ô]. Aparece uma tabela.
Escolha uma em branco e digite um nome e depois escolha o Type String e Scope escolha Applicatiion e depois na outra em Value colocar o caminho dos seus relatórios.
EX:
C:\Relatorio\
Coloque essa \ sim, pois depois desta barra é que vai estar os relatórios. Depois é só fazer a chamada na sua classe ou sub que tem o caminho do relatório e colocar
My.Settings.NOMEDOCONFIGURACAOSALVANOSETTINGS
Somente isto.
Vá no menu Projects>Properties
clique no lado esquerdo na aba [Ô]Settings[Ô]. Aparece uma tabela.
Escolha uma em branco e digite um nome e depois escolha o Type String e Scope escolha Applicatiion e depois na outra em Value colocar o caminho dos seus relatórios.
EX:
C:\Relatorio\
Coloque essa \ sim, pois depois desta barra é que vai estar os relatórios. Depois é só fazer a chamada na sua classe ou sub que tem o caminho do relatório e colocar
My.Settings.NOMEDOCONFIGURACAOSALVANOSETTINGS
Somente isto.
Quando for levar para algum outro lugar e tiver que trocar, é só entrar dentro do arquivo chamado NOMEDASUAAPLICACAO.exe,vai estar escrito XML Configuration File, dentro da pasta debug ou release. Abra ele com o bloco de notas e lá você vai ver o nome do seu atalho e é só alterar manualmente mesmo. Nem precisa ser automatizado não.
entendi,funcionou certinho Marcos,o estranho ''e que quando eu publico a aplicaçao e instalo ela em alguma maquina ele da o seguinte erro:
Could not load file or assembly [ô]CrystalDecisions.ReportAppServer.CommLayer, Version=10.5.3700.0, Culture=neutral, PublicKeyToken=692fbea5521e1304[ô] or one of its dependencies. The system cannot find the file specified
Could not load file or assembly [ô]CrystalDecisions.ReportAppServer.CommLayer, Version=10.5.3700.0, Culture=neutral, PublicKeyToken=692fbea5521e1304[ô] or one of its dependencies. The system cannot find the file specified
consegui resolver,na verdade o que eu nao sabia é que nas estações cliente eu preciso instalar o Crystal Reports Basic para VST 2008,para que eles possam visualizar os relatorios..
valeu .....
valeu .....
Tópico encerrado , respostas não são mais permitidas