PASSAR VALOR DA LINHA DO GRID COMO PARAMETRO PARA

VINICIUSEROICO 12/03/2010 13:06:49
#336777
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???
MARCOSARANTESJ 12/03/2010 13:38:36
#336787
Resposta escolhida
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.
VINICIUSEROICO 12/03/2010 13:49:18
#336795
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 ....

MARCOSARANTESJ 12/03/2010 14:51:40
#336806
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

VINICIUSEROICO 12/03/2010 15:20:27
#336811
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??
MARCOSARANTESJ 12/03/2010 15:31:25
#336814
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.
MARCOSARANTESJ 12/03/2010 15:33:56
#336816
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.
VINICIUSEROICO 12/03/2010 16:24:37
#336822
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


VINICIUSEROICO 15/03/2010 08:55:58
#336968
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 .....
Tópico encerrado , respostas não são mais permitidas