2009-09-17 4 views
8

ग्रीटिंग्स।एसएसआरएस - स्तंभों को गतिशील रूप से छुपाते समय तालिका को एक ही चौड़ाई रखें?

मेरे पास एक एसएसआरएस 2005 रिपोर्ट है जो चीजों की कीमतें दिखाती है। कुछ ग्राहकों के लिए, मैं तालिका से एक कॉलम छुपाता हूं (दृश्यता पर एक अभिव्यक्ति के साथ - छुपी हुई संपत्ति)।

जब मैं ऐसा करता हूं, तो मेरी तालिका कम हो जाती है। मैंने इस तालिका को गतिशील रूप से आकार देने के लिए लंबे समय तक और कठिन खोज की है (या इसे एक ही चौड़ाई में रहने के लिए डिज़ाइन समय पर कुछ करने के लिए), लेकिन मैं अटक गया हूं।

उत्तर जो बस 'आप ऐसा नहीं कर सकते' बताते हैं, मेरी मदद नहीं करेगा। मैंने इसे पहले ही पढ़ लिया है: http://forums.asp.net/t/1354956.aspx

मुझे उम्मीद है कि एसओ समुदाय की कुछ स्मार्ट आत्मा मेरे लिए एक कामकाज है। धन्यवाद!

+0

क्या आप सभी कॉलम का आकार बदलना चाहते हैं ताकि जब कोई विशिष्ट कॉलम अदृश्य हो तो यह पूरी तालिका को कवर करे? – shahkalpesh

+0

यह काम करेगा। मैं कॉलम के 1 या 2 का आकार बदलकर बसूंगा। मुझे बस एक ही चौड़ाई के लिए टेबल की जरूरत है। – JoeB

उत्तर

6

एकमात्र तरीका मुझे पता है कि इसे कैसे पूरा किया जाए, यह आपके आरडीएलसी फ़ाइल को रनटाइम के दौरान बदलकर है। असल में, आप अपनी आरएलडीसी फ़ाइल को मेमोरी (इसकी सिर्फ एक एक्सएमएल फाइल) में लोड कर सकते हैं, एक्सएमएल नोड का पता लगाएं जिसमें आपकी तालिका की चौड़ाई है - फिर मेमोरी में सेटिंग को संशोधित करें। एक बार ऐसा करने के बाद, आप स्मृति में लोड की गई आरडीएलसी फ़ाइल का उपयोग करके अपनी रिपोर्ट व्यूअर कंट्रोल रीफ्रेश कर सकते हैं।

और हाँ, मैंने पहले ही यह किया है, और यह काम करता है।

--- EDIT --- निम्नलिखित कोड उदाहरण आरडीएलसी फ़ाइल के डेटा को अपने 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 
+1

समस्या पर बहुत दिलचस्प लगता है। मैं इसे एक और घंटे देने जा रहा हूं और यदि कोई बेहतर समाधान के साथ दिखाई नहीं देता है तो मैं आपको जवाब के रूप में चिह्नित करूंगा। धन्यवाद! – JoeB

+0

यदि आप चाहें तो आपकी मदद करने के लिए मैं कुछ वीबीएनईटी कोड को पीछे छोड़ सकता हूं .. मैं अभी वास्तव में हूं। – jgallant

+0

कोड पोस्ट किया गया। अगर आपको इसके बारे में कोई सवाल है तो मुझे बताएं। हम इस विधि के साथ हमारी रिपोर्ट को स्थानीयकृत करते थे (भाषा स्विच होने पर डेटा को बदलना)। अब हम अपनी रिपोर्ट गतिशील रूप से उत्पन्न कर रहे हैं, इसलिए हम अब इसका उपयोग नहीं करते हैं। – jgallant

संबंधित मुद्दे