ReportViewer - Скройте экспорт PDF

ОБНОВЛЕНИЕ: УДАЛИТЕ из триггерных работ и над MSSql 7 и над 2008 MSSql.

я не реляционный гуру, ни зубрила стандартов SQL. Однако - вопреки принятому ответу - MSSQL имеет дело очень хорошо и с recursive и с оценкой вложенного триггера . Я не знаю о другом RDBMSs.

соответствующие опции 'рекурсивные триггеры' и 'вложенные триггеры' . Вложенные триггеры ограничены 32 уровнями и значением по умолчанию к 1. Рекурсивные триггеры прочь по умолчанию, и нет никакого разговора о пределе - но откровенно говоря, я никогда не включал их, таким образом, я не знаю то, что происходит с неизбежным переполнением стека. Я подозреваю, что MSSQL просто уничтожил бы Ваш spid (или существует рекурсивный предел).

, Конечно, который просто показывает, что принятый ответ имеет неправильное причина , не, что это неправильно. Однако до триггеров INSTEAD OF, я вспоминаю запись НА триггерах ВСТАВКИ, которые весело ОБНОВИЛИ бы справедливые вставленные строки. Это все хорошо работало, и как ожидалось.

А быстрый тест DELETEing справедливая вставленная строка также работает:

 CREATE TABLE Test ( Id int IDENTITY(1,1), Column1 varchar(10) )
 GO

 CREATE TRIGGER trTest ON Test 
 FOR INSERT 
 AS
    SET NOCOUNT ON
    DELETE FROM Test WHERE Column1 = 'ABCDEF'
 GO

 INSERT INTO Test (Column1) VALUES ('ABCDEF')
 --SCOPE_IDENTITY() should be the same, but doesn't exist in SQL 7
 PRINT @@IDENTITY --Will print 1. Run it again, and it'll print 2, 3, etc.
 GO

 SELECT * FROM Test --No rows
 GO

у Вас есть что-то еще продолжающееся здесь.

19
задан jgallant 30 September 2009 в 19:27
поделиться

3 ответа

Мне удалось отключить кнопку «Экспорт PDF», немного повозившись. Класс ReportViewer не имеет общедоступных функций для отключения кнопки панели инструментов «Экспорт в PDF». Чтобы сделать это, взгляните на следующий код:

Вызовите эту функцию во время события OnLoad на вашей странице reportViewer:

 Private Sub CustomizeRV(ByVal ctrl As Control)
    For Each c As Control In ctrl.Controls
      If TypeOf c Is ToolStrip Then
        Dim ts As ToolStrip = DirectCast(c, ToolStrip)
        For i As Integer = 0 To ts.Items.Count - 1
          If ts.Items(i).Name = "export" Then
            Dim exp As ToolStripDropDownButton = ts.Items(i)
            AddHandler exp.DropDownOpening, AddressOf disableButton
          End If
        Next
      End If
      If c.HasChildren Then
        CustomizeRV(c)
      End If
    Next
  End Sub

Мне не удалось установить здесь свойство Visible кнопки панели инструментов, поскольку параметры экспорта загружаются OnDropDownOpened. Вместо этого я добавил обработчик, который позаботится об отключении опции экспорта при щелчке раскрывающегося списка инструментов. Функция обработчика выглядит следующим образом:

  Private Sub disableButton(ByVal sender As Object, ByVal e As System.EventArgs)
    Dim btn As ToolStripDropDownButton = DirectCast(sender, ToolStripDropDownButton)
    btn.DropDownItems(1).Visible = False
  End Sub

По сути, Onload вы добавляете обработчик событий, чтобы при нажатии кнопки «Экспорт в раскрывающемся списке» запускалась указанная выше функция, делая экспорт в PDF невидимым.

Решение будет работать точно, я только что закончил заставлять его работать.

2
ответ дан 30 November 2019 в 01:59
поделиться

This is how you disable a export option, just mark all the ones except Excel to false.
*Don't forget to restart the Reporting Services service.

File: InstallPath\Reporting Services\ReportServer\rsreportserver.config

Enabled:

<Extension Name="EXCEL"
Type="Microsoft.ReportingServices.Rendering.ExcelRenderer.ExcelRenderer,Microsoft.ReportingServices.ExcelRendering"/>

Disabled:

<Extension Name="EXCEL"
Type="Microsoft.ReportingServices.Rendering.ExcelRenderer.ExcelRenderer,Microsoft.ReportingServices.ExcelRendering"
Visible="false"/>
10
ответ дан 30 November 2019 в 01:59
поделиться

Использование приведенного выше кода Джона в качестве ссылку, мне удается скрыть "Excel" в программе во время выполнения. Однако я не очень хорошо разбираюсь в VB.net, поэтому поместил образец на C #. Извините за это, но я надеюсь, что это поможет. Еще одна вещь, отчет встроен в страницу ASP.net.

  // This is the Load event of the reports itself.
  // Call the recursive method.
  protected void ReportViewerResults_Load(object sender, EventArgs e)
  {
    CustomizeRV((System.Web.UI.Control)sender);
  }

  // Patterned from Jon.
  // Traverse all controls/child controls to get the dropdownlist.
  // The first dropdown list is the ZoomGroup, followed by the ExportGroup.
  // We just wanted the ExportGroup.
  // When a dropdownlist is found, create a event handler to be used upon rendering.
  private void CustomizeRV(System.Web.UI.Control reportControl)
  {
    foreach (System.Web.UI.Control childControl in reportControl.Controls)
    {
      if (childControl.GetType() == typeof(System.Web.UI.WebControls.DropDownList))
      {
        System.Web.UI.WebControls.DropDownList ddList = (System.Web.UI.WebControls.DropDownList)childControl;
        ddList.PreRender += new EventHandler(ddList_PreRender);
      }
      if (childControl.Controls.Count > 0)
      {
        CustomizeRV(childControl);
      }
    }
  }

  // This is the event handler added from CustomizeRV
  // We just check the object type to get what we needed.
  // Once the dropdownlist is found, we check if it is for the ExportGroup.
  // Meaning, the "Excel" text should exists.
  // Then, just traverse the list and disable the "Excel".
  // When the report is shown, "Excel" will no longer be on the list.
  // You can also do this to "PDF" or if you want to change the text.
  void ddList_PreRender(object sender, EventArgs e)
  {
    if (sender.GetType() == typeof(System.Web.UI.WebControls.DropDownList))
    {
      System.Web.UI.WebControls.DropDownList ddList = (System.Web.UI.WebControls.DropDownList)sender;
      System.Web.UI.WebControls.ListItemCollection listItems = ddList.Items;

      if ((listItems != null) && (listItems.Count > 0) && (listItems.FindByText("Excel") != null))
      {
        foreach (System.Web.UI.WebControls.ListItem list in listItems)
        {
          if (list.Text.Equals("Excel")) 
          {
            list.Enabled = false;
          }
        }
      }
    }
  }

Я пытался выбрать элемент по умолчанию для «PDF», но не смог найти способ включить текстовую кнопку «Экспорт». :-(

5
ответ дан 30 November 2019 в 01:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: