2009-09-17 25 views
8

Selamlar. SSRS - Sütunları dinamik olarak gizlerken bir tabloyu aynı genişlikte tutun.

Ben şeylerin fiyatlarını gösteren bir SSRS 2005 raporu var. Bazı müşteriler için, tablodan bir sütunu gizlerim (Görünürlük - gizli özellikteki bir ifadeyle). Bunu yaparken

, benim masa küçülür. Bu tabloyu dinamik olarak yeniden boyutlandırmak için (ve aynı genişlikte kalmasını sağlamak için tasarım zamanında bir şeyler yapmak için) uzun ve zor arama yaptım, ancak takılıyorum. basitçe 'Bu yapamaz' devlet

Cevapları bana yardımcı olmayacaktır. Bunu zaten okudum: http://forums.asp.net/t/1354956.aspx

SO topluluğunun bazı akıllı ruhunun benim için bir geçici çözümü olduğunu umuyorum. Teşekkürler!

+0

Belirli bir sütun görünmez olduğunda tüm sütunların yeniden boyutlandırılmasını istiyor musunuz? – shahkalpesh

+0

Bu işe yarayacaktı. Sütunların 1 veya 2'sini yeniden boyutlandırmaya karar verdim. Aynı genişlikte olması için masaya ihtiyacım var. – JoeB

cevap

6

Bunu başarmak için bildiğim tek yolu, çalışma zamanı sırasında RDLC dosyası değiştirerek gereğidir. Temel olarak, belleğe BYDM'ler dosyası (onun sadece bir XML dosyası) yükleyebilirsiniz masanıza genişliğini içeren XML düğümü bulun - o zaman bellekte ayarı değiştirin. Bunu yaptıktan sonra, bellekte yüklü RDLC dosyasını kullanarak reportViewer denetiminizi yenileyebilirsiniz.

Ve evet, ben zaten bu yapmış ve çalışır.

--- EDIT --- Aşağıdaki kod örneği, bir RDLC dosyasının belleğindeki verilerini XMLpath aracılığıyla değiştirmektir.

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

Çok ilginç bir sorunla karşı karşıya. Bir saat daha vereceğim ya da hiç kimse daha iyi bir çözüm göstermezse sizi cevap olarak işaretleyeceğim. Teşekkürler! – JoeB

+0

İsterseniz size yardımcı olmak için bazı VB.NET kodlarını geçebilirim .. Şu anda gerçekten olacağım. – jgallant

+0

Kodu Yayınlandı. Bununla ilgili herhangi bir sorunuz olursa lütfen bize bildirin. Raporlarımızı bu yöntemle yerelleştirdik (dili değiştirdiğinde verileri değiştirdik). Artık raporlarımızı dinamik olarak üretiyoruz, bu yüzden artık kullanmıyoruz. – jgallant

İlgili konular