इसे पूरा करने का एकमात्र तरीका मुझे पता है कि रनटाइम के दौरान आपकी आरडीएलसी फ़ाइल को बदलना है। मूल रूप से, आप अपनी आरएलडीसी फ़ाइल को मेमोरी में लोड कर सकते हैं (यह सिर्फ एक एक्सएमएल फाइल है), एक्सएमएल नोड का पता लगा सकते हैं जिसमें आपकी टेबल की चौड़ाई है - फिर मेमोरी में सेटिंग को संशोधित करें। एक बार जब आप ऐसा कर लेते हैं, तो आप मेमोरी में लोड RDLC फ़ाइल का उपयोग करके अपने रिपोर्ट व्यूअर नियंत्रण को ताज़ा कर सकते हैं।
और हाँ, मैं पहले ही यह कर चुका हूँ, और यह काम करता है।
निम्न कोड उदाहरण आरडीएलसी फ़ाइल के डेटा को उसके XMLpath के माध्यम से मेमोरी में बदलना है।
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