Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

SSRS - Giữ một bảng có cùng chiều rộng khi ẩn các cột động?

Cách duy nhất tôi biết cách thực hiện điều này là bằng cách thay đổi tệp RDLC của bạn trong thời gian chạy. Về cơ bản, bạn có thể tải tệp RLDC của mình vào bộ nhớ (tệp này chỉ là tệp XML), xác định vị trí nút XML chứa chiều rộng bảng của bạn - sau đó sửa đổi cài đặt trong bộ nhớ. Sau khi hoàn thành việc đó, bạn có thể làm mới điều khiển reportViewer của mình bằng cách sử dụng tệp RDLC được tải trong bộ nhớ.

Và vâng, tôi đã làm điều này và nó hoạt động.

Ví dụ mã sau đây là thay đổi dữ liệu của tệp RDLC trong bộ nhớ, thông qua đường dẫn XML của nó.

  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. Tất cả các Vĩ độ của một bảng sql trong vòng 15 km đến mỗi Vĩ độ của một bảng khác nhau-sql 2008

  2. Không thể kết nối nữa với cơ sở dữ liệu SQL Server 2008 cục bộ

  3. Máy chủ MS SQL - chuyển đổi chuỗi HEX thành số nguyên

  4. Tìm sự phụ thuộc của cột

  5. DATETIME2FROMPARTS () Ví dụ trong SQL Server (T-SQL)