Visualizador do SQL Reporting Services para página da Web - você pode mover o botão Exibir relatório?
-
09-06-2019 - |
Pergunta
Usando o controle do visualizador para exibição de relatórios do SQL Reporting Services na página da web (Microsoft.ReportViewer.WebForms), você pode mover o botão Exibir relatório?O padrão é o lado direito do relatório, o que significa que você precisa rolar até o fim antes que o botão fique visível.Não é um problema para relatórios que se ajustam à largura da janela, mas para relatórios muito amplos isso rapidamente se torna um problema.
Solução
É meio que um hack, mas você pode movê-lo em JavaScript.Basta ver qual HTML o ReportViewer gera e escrever o código JavaScript apropriado para mover o botão.Usei JavaScript para ocultar o botão (porque queríamos nosso próprio botão Visualizar relatório).Qualquer código JavaScript que manipule o HTML do ReportViewer gerado deve vir depois do controle ReportViewer na página .aspx.Aqui está meu código para ocultar o botão, para lhe dar uma ideia do que você faria:
function getRepViewBtn() {
return document.getElementsByName("ReportViewer1$ctl00$ctl00")[0];
}
function hideViewReportButton() { // call this where needed
var btn = getRepViewBtn();
btn.style.display = 'none';
}
Outras dicas
Não, você não pode reposicionar o botão visualizar relatório no controle ReportViewer.
No entanto, você pode criar seu próprio controle de visualização de relatório personalizado.O controle seria composto por campos para parâmetros do relatório e um botão para geração do relatório.Quando um usuário clica no botão, você pode gerar o relatório em segundo plano.Você pode exibir o relatório como PDF, HTML, etc.
A razão pela qual o botão é empurrado para a direita é que o td dos parâmetros tem largura = "100%".Estou resolvendo esse problema com o seguinte jquery.Simplesmente altera a largura dos parâmetros td para 1.Os navegadores expandirão a largura por conta própria até a largura do conteúdo do elemento.Espero que isto ajude.
<script type="text/javascript">
$(document).ready(function() {
$("#<%= ReportViewer1.ClientID %> td:first").attr("width", "1");
});
</script>
Como ontem estava procurando essa resposta, pensei em postar o que descobri para resolver nosso problema.Nossos relatórios estavam voltando amplamente e queríamos que o botão "visualizar relatórios" existisse no lado esquerdo do controle para que não houvesse necessidade de rolar para chegar ao botão.Eu precisei ir até a origem do arquivo renderizado para encontrar os nomes de ID do botão e da tabela de destino.
Eu escrevi uma função javascript simples de recortar e colar para puxar o botão de sua posição original e, essencialmente, soltá-lo na próxima linha da tabela abaixo dos seletores de data.
function moveButton() {
document.getElementById('ParameterTable_ctl00_MainContent_MyReports_ctl04').appendChild(document.getElementById('ctl00_MainContent_MyReports_ctl04_ctl00'));
}
Essa função é chamada no evento de carregamento do visualizador de relatório.
ScriptManager.RegisterStartupScript(Me, Me.GetType(), "moveButton", "moveButton();", True)
Para ajustar a posição, usei o ID CSS.
#ctl00_MainContent_MyReports_ctl04_ctl00 {
margin: 0px 0px 0px 50px;
}
Tive o mesmo problema e acabei usando uma extensão na resposta de Travis Collins;Além de alterar a largura da coluna da tabela, também alinho o botão "Visualizar relatório" à esquerda para que pareça mais próximo do restante dos controles.
<script type="text/javascript">
$(document).ready(function() {
$("#_ctl0_MainContent_reportViewer_fixedTable tr:first td:first-child").attr("width", "1");
$("#_ctl0_MainContent_reportViewer_fixedTable tr:first td:last-child").attr("align", "left");
});
</script>
Talvez seja necessário ajustar o seletor JQuery dependendo da nomenclatura do elemento atribuída ao seu controle existente.