Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

SSRS — zachować tę samą szerokość tabeli podczas dynamicznego ukrywania kolumn?

Jedynym sposobem, w jaki wiem, jak to osiągnąć, jest zmiana pliku RDLC w czasie wykonywania. Zasadniczo możesz załadować plik RLDC do pamięci (jest to tylko plik XML), zlokalizować węzeł XML, który zawiera szerokość tabeli - a następnie zmodyfikować ustawienie w pamięci. Gdy to zrobisz, możesz odświeżyć kontrolkę ReportViewer za pomocą pliku RDLC, który jest ładowany do pamięci.

I tak, już to zrobiłem i to działa.

Poniższy przykład kodu polega na zmianie danych pliku RDLC w pamięci za pomocą ścieżki XML.

  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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak używać sortowania (Order By) w instrukcji Select w SQL Server — samouczek SQL Server / TSQL, część 109

  2. Tworzenie indeksu pełnotekstowego na widoku w SQL Server 2005

  3. Jak uzyskać plan wykonywania zapytań w programie SQL Server?

  4. Przekazywanie listy<> do procedury składowanej SQL

  5. Nieprawidłowa nazwa kolumny błąd sql