我可能有错误分配的问题。看...
我有一个创建水晶报表文件(发票)...这个文件有很多参数
t.e.姓名、地址、电话、税率和其他...并已绑定到 Datatable,其中包括有关商品、数量、成本和其他的信息...这一切都很好...我用这段代码来做。
Dim rptobj As New rpt_Invoice ' my invoice sceleton
Using tblInvoice As New DataTable
'DataTable to bind
tblInvoice.Columns.Add("ANAME", GetType(String))
tblInvoice.Columns.Add("CNT", GetType(Double))
tblInvoice.Columns.Add("CNTSTR", GetType(String))
tblInvoice.Columns.Add("OUT_PR", GetType(Double))
For Each row As Datagridviewrow In rowCol
Dim Drow As Data.DataRow = tblInvoice.NewRow
Drow.Item("ANAME") = DBNullBug(row.Cells("ANAME").Value)
Drow.Item("CNT") = row.Cells("DECCNT").Value
Drow.Item("CNTSTR") = row.Cells("CNT").Value
Drow.Item("OUT_PR") = row.Cells("SOLD_PR").Value
tblInvoice.Rows.Add(Drow)
Next
'Params to pass
Dim RPTParams As New Hashtable
RPTParams.Add("NDS", OPT.Item.NDSValue)
RPTParams.Add("INVOICENUM", "")
RPTParams.Add("INVOICEHIMQ", "")
RPTParams.Add("KATPASHT1", "Director")
RPTParams.Add("KATPASHT2", "Accountant")
RPTParams.Add("VCHPASHT1", "Director")
RPTParams.Add("VCHPASHT2", "Accountant")
RPTParams.Add("ADATE", CDate(Now))
RPTParams.Add("INFO", "")
RPTParams.Add("ORDER_ID", Order_Id)
Dlg_RepPreview.STable = tblInvoice
Dlg_RepPreview.SParams = RPTParams
Dlg_RepPreview.rep = rptobj
Dlg_RepPreview.ShowDialog()
End Using
而名为“Dlg_RepPreview”的表格有rep变量(reportdocument)和STable(DataTable),SParams as Hashtable(带参数的hashtable)。
在 Form_Load 上我写了这段代码
Private Sub Dlg_Rep_Load(ByVal sender As Object, ByVal e As System.EventArgs) 处理 Me.Load
RP_Viwer.ReportSource = rep ' RP_Viwer 是我的 ReportViewer
如果 STable 不是什么都没有,那么
rep.SetDataSource(STable) ' 设置数据源
万一
For Each Param As ParameterField In rep.ParameterFields ' set parametervalues
如果 SParams.ContainsKey(Param.Name.ToUpper) 那么
rep.SetParameterValue(Param.Name, SParams(Param.Name.ToUpper))
别的
rep.SetParameterValue(Param.Name, Param.DefaultValues())
万一
下一个
RP_Viwer.Zoom(75)
RP_Viwer.Refresh()
结束子
在这种形式中,我有一个按钮。当用户单击该按钮时,打开对话框表单,报告中包含所有参数和值(无数据源)。用户可以更改参数值(e.t.c 地址、电话、名称),但数据源(e.t.c 商品、数量、成本)除外。
我不能那样做。我尝试编写这样简单的代码:
rep.SetParameterValue(Param.Name, Param.value)
rep.Refresh()
RP_Viwer.Refresh()
但是这段代码不起作用...我该怎么办???