问候。
我有一份SSRS 2005报告,显示了物品的价格。对于某些客户,我隐藏了表中的列(在Visibility - hidden属性上有一个表达式)。
当我这样做时,我的桌子缩小了。我已经搜索了很长时间以寻找动态调整此表格的方法(或者在设计时做某事以使其保持相同的宽度),但是我被卡住了。
简单地陈述“你不能这样做”的答案对我没有帮助。我已经读过了: http://forums.asp.net/t/1354956.aspx
我希望SO社区的一些聪明的灵魂有一个解决方法。谢谢!
答案 0 :(得分:6)
我知道如何实现这一目标的唯一方法是在运行时更改RDLC文件。基本上,您可以将RLDC文件加载到内存(它只是一个XML文件),找到包含表格宽度的XML节点 - 然后修改内存中的设置。完成后,您可以使用内存中加载的RDLC文件刷新reportViewer控件。
是的,我已经这样做了,它确实有效。
--- 编辑 ---以下代码示例是通过XML路径更改内存中RDLC文件的数据。
Private Sub ModifyRDLCInMemory()
Dim xmlDoc As XmlDocument = New XmlDocument
Dim asm As Reflection.Assembly = Reflection.Assembly.GetExecutingAssembly()
'create in memory, a XML file from a embedded resource
Dim xmlStream As Stream = asm.GetManifestResourceStream(ReportViewer1.LocalReport.ReportEmbeddedResource)
Try
'Load the RDLC file into a XML doc
xmlDoc.Load(xmlStream)
Catch e As Exception
MessageBox.Show(e.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1)
End Try
'Create an XmlNamespaceManager to resolve the default namespace
Dim nsmgr As XmlNamespaceManager = New XmlNamespaceManager(xmlDoc.NameTable)
nsmgr.AddNamespace("nm", "http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition")
nsmgr.AddNamespace("rd", "http://schemas.microsoft.com/SQLServer/reporting/reportdesigner")
'Loop through each node in the XML file
Dim node As XmlNode
For Each node In xmlDoc.DocumentElement.SelectNodes(String.Format("//nm:{0}[@rd:LocID]", "Value"), nsmgr) 'XPath to LocID node.. You will want to change this to locate your Table Width node. You may need to read up on XMLPath
Dim nodeValue As String = node.InnerText 'Gets current value of Node
If (String.IsNullOrEmpty(nodeValue) Or Not nodeValue.StartsWith("=")) Then
Try
node.InnerText = YOURNEWVALUE
Catch ex As Exception
'handle error
End Try
End If
Next
ReportViewer1.LocalReport.ReportPath = String.Empty
ReportViewer1.LocalReport.ReportEmbeddedResource = Nothing
'Load the updated RDLC document into LocalReport object.
Dim rdlcOutputStream As StringReader = New StringReader(xmlDoc.DocumentElement.OuterXml)
Using rdlcOutputStream
ReportViewer1.LocalReport.LoadReportDefinition(rdlcOutputStream)
End Using
End Sub
答案 1 :(得分:0)
最好的选择是复制该表,并将其与要显示的列放在另一个上方。然后,您可以动态设置表格的可见性。为了使它们可编辑,您可以将一张桌子放到比另一张桌子小一点的位置,以便在它上方时选择它。