Frage

Hat jemand gute Ideen, wie die Symbolleiste für die WinForms Version des Reports Toolbar ändern? Das heißt, möchte ich einige Tasten und varius entfernen, aber es sieht aus wie die Lösung eine völlig neue Symbolleiste statt Modifizieren die eine, die es zu schaffen ist.

Wie hatte ich den Export entfernen auszuzeichnen, und es auf diese Weise tat:

  // Disable excel export
  foreach (RenderingExtension extension in lr.ListRenderingExtensions()) {
    if (extension.Name == "Excel") {
      //extension.Visible = false; // Property is readonly...
      FieldInfo fi = extension.GetType().GetField("m_isVisible", BindingFlags.Instance | BindingFlags.NonPublic);
      fi.SetValue(extension, false);
    }
  }

Ein bisschen trickysh wenn Sie mich fragen .. Zum Entfernen von toolbar, war eine Art und Weise, durch die Steuer Array innerhalb des Reports iterieren und die Visible-Eigenschaft für die Tasten zu verbergen ändern, aber es wird die ganze Zeit zurückgesetzt, so dass es kein guter Weg ist ..

WANN MS kommt mit einer neuen Version btw?

War es hilfreich?

Lösung

Es gibt eine Menge von Eigenschaften festlegen, welche Tasten würden Sie sehen möchten.

Zum Beispiel ShowBackButton , ShowExportButton , Hilfe , beginnt alles mit "Show".

Aber du hast recht, können Sie keine neue Schaltflächen hinzufügen. Sie haben eine eigene Symbolleiste erstellen, um dies zu tun.

Was meinen Sie über eine neue Version? Es gibt bereits eine 2008 SP1 Version.

Andere Tipps

Yeap. Sie können, dass in einem wenig kompliziert Weise tun. Ich hatte eine Aufgabe mehr Skalierungsfaktoren zu zoomen Bericht hinzuzufügen. Ich habe es so aus:

    private readonly string[] ZOOM_VALUES = { "25%", "50%", "75%", "100%", "110%", "120%", "125%", "130%", "140%", "150%", "175%", "200%", "300%", "400%", "500%" };
    private readonly int DEFAULT_ZOOM = 3;
    //--

    public ucReportViewer()
    {
        InitializeComponent();   
        this.reportViewer1.ProcessingMode = ProcessingMode.Local;

        setScaleFactor(ZOOM_VALUES[DEFAULT_ZOOM]);

        Control[] tb = reportViewer1.Controls.Find("ReportToolBar", true);

        ToolStrip ts;
        if (tb != null && tb.Length > 0 && tb[0].Controls.Count > 0 && (ts = tb[0].Controls[0] as ToolStrip) != null)
        {
            //here we go if our trick works (tested at .NET Framework 2.0.50727 SP1)
            ToolStripComboBox tscb = new ToolStripComboBox();
            tscb.DropDownStyle = ComboBoxStyle.DropDownList;

            tscb.Items.AddRange(ZOOM_VALUES);                
            tscb.SelectedIndex = 3; //100%

            tscb.SelectedIndexChanged += new EventHandler(toolStripZoomPercent_Click);

            ts.Items.Add(tscb);
        }
        else
        {                
            //if there is some problems - just use context menu
            ContextMenuStrip cmZoomMenu = new ContextMenuStrip();

            for (int i = 0; i < ZOOM_VALUES.Length; i++)
            {
                ToolStripMenuItem tsmi = new ToolStripMenuItem(ZOOM_VALUES[i]);

                tsmi.Checked = (i == DEFAULT_ZOOM);
                //tsmi.Tag = (IntPtr)cmZoomMenu;
                tsmi.Click += new EventHandler(toolStripZoomPercent_Click);

                cmZoomMenu.Items.Add(tsmi);
            }

            reportViewer1.ContextMenuStrip = cmZoomMenu;
        }                    
    }

    private bool setScaleFactor(string value)
    {
        try
        {
            int percent = Convert.ToInt32(value.TrimEnd('%'));

            reportViewer1.ZoomMode = ZoomMode.Percent;
            reportViewer1.ZoomPercent = percent;

            return true;
        }
        catch
        {
            return false;
        }
    }


    private void toolStripZoomPercent_Click(object sender, EventArgs e)
    {
        ToolStripMenuItem tsmi = sender as ToolStripMenuItem;
        ToolStripComboBox tscb = sender as ToolStripComboBox;

        if (tscb != null && tscb.SelectedIndex > -1)
        {
            setScaleFactor(tscb.Items[tscb.SelectedIndex].ToString());
        }
        else if (tsmi != null)
        {
            if (setScaleFactor(tsmi.Text))
            {
                foreach (ToolStripItem tsi in tsmi.Owner.Items)
                {
                    ToolStripMenuItem item = tsi as ToolStripMenuItem;

                    if (item != null && item.Checked)
                    {
                        item.Checked = false;
                    }
                }

                tsmi.Checked = true;
            }
            else
            {
                tsmi.Checked = false;
            }
        }
    }

Erhalten Sie die Symbolleiste von Reportviewer-Steuerelement:

ToolStrip toolStrip = (ToolStrip)reportViewer.Controls.Find("toolStrip1", true)[0]

Fügen Sie neue Objekte:

toolStrip.Items.Add(...)

Eine andere Möglichkeit wäre die erzeugte HTML zur Laufzeit über Javascript zu manipulieren. Es ist nicht sehr elegant, aber es gibt Ihnen die volle Kontrolle über die generierten HTML.

Für VS2013 Web-Report V11 (als rv angegeben), fügt der folgende Code eine Schaltfläche.

private void AddPrintBtn()
    {           
        foreach (Control c in rv.Controls)
        {
            foreach (Control c1 in c.Controls)
            {
                foreach (Control c2 in c1.Controls)
                {
                    foreach (Control c3 in c2.Controls)
                    {
                        if (c3.ToString() == "Microsoft.Reporting.WebForms.ToolbarControl")
                        {
                            foreach (Control c4 in c3.Controls)
                            {
                                if (c4.ToString() == "Microsoft.Reporting.WebForms.PageNavigationGroup")
                                {
                                    var btn = new Button();
                                    btn.Text = "Criteria";
                                    btn.ID = "btnFlip";
                                    btn.OnClientClick = "$('#pnl').toggle();";
                                    c4.Controls.Add(btn);
                                    return;
                                }
                            }
                        }
                    }
                }
            }
        }
    }

hatte ich diese Frage für al ong Zeit II die Antwort nach einer langen Krawatte und die Hauptquelle der Kenntnisse sichergestellt fand ich verwendet wurde, war dies webpega: Ich möchte Sie alle Jungs danken den Code hinzufügen, die mich, es zu tun erlaubt und ein Bild mit dem Ergebnis.

Statt die Reportklasse verwenden, können Sie einen neuen classs erstellen müssen, in meinem Fall, nannte ich es ReportViewerPlus und es geht wie folgt aus:

using Microsoft.Reporting.WinForms;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace X
{
    class ReportViewerPlus : ReportViewer
    {
        private Button boton { get; set; }

        public ReportViewerPlus(Button but) {
            this.boton = but;
            testc(this.Controls[0]);
        }
        public ReportViewerPlus()
        {
        }
        private void testc(Control item){
            if(item is ToolStrip)   
            {       
                ToolStripItemCollection tsic = ((ToolStrip)item).Items;
                tsic.Insert(0, new ToolStripControlHost(boton));       
                return;   
            }   
            for (int i = 0; i < item.Controls.Count; i++)   
            {      
                testc(item.Controls[i]);  
            }   
        }
    }
}

Sie haben die Taste direkt in den Konstruktor der Klasse hinzuzufügen, und Sie können auf die Schaltfläche in Ihrem Designer konfigurieren.

Hier ist ein Bild von dem Ergebnis, nicht perfekt, aber genug, um zu gehen (sichere Verbindung Ich schwöre, aber ich kann meine eigenen Bilder nicht veröffentlichen, habe nicht genug Ruf).

http://prntscr.com/5lfssj

Wenn Sie sorgfältig in dem Code der Klasse aussehen, würden Sie mehr oder weniger sehen, wie es funktioniert und Sie könnten Ihre Änderungen vornehmen und machen es möglich, sie in anderer Stelle der Symbolleiste zu etablieren.

Vielen Dank für mich in der Vergangenheit helfen, ich hoffe das viele Leute hilft!

Im Allgemeinen sind Sie annehmen, eine eigene Symbolleiste zu erstellen, wenn Sie es ändern möchten. Ihre Lösung zum Entfernen von Tasten wird wahrscheinlich funktionieren, wenn das alles ist, was Sie tun müssen, aber wenn Sie Ihre eigenen hinzufügen möchten, sollten Sie wahrscheinlich nur den sauren Apfel beißen und einen Ersatz bauen.

Sie können Reportviewer-Steuerelemente von CustomizeReportToolStrip Methode ändern. In diesem Beispiel löscht Seite Setup-Taste, Seitenlayout-Taste in WinForm

public CustOrderReportForm() {
  InitializeComponent();
  CustomizeReport(this.reportViewer1);
}


private void CustomizeReport(Control reportControl, int recurCount = 0) {
  Console.WriteLine("".PadLeft(recurCount + 1, '.') + reportControl.GetType() + ":" + reportControl.Name);
  if (reportControl is Button) {
    CustomizeReportButton((Button)reportControl, recurCount);
  }
  else if (reportControl is ToolStrip) {
    CustomizeReportToolStrip((ToolStrip)reportControl, recurCount);
  }
  foreach (Control childControl in reportControl.Controls) {
    CustomizeReport(childControl, recurCount + 1);
  }
}

//-------------------------------------------------------------


void CustomizeReportToolStrip(ToolStrip c, int recurCount) {
  List<ToolStripItem> customized = new List<ToolStripItem>();
  foreach (ToolStripItem i in c.Items) {
    if (CustomizeReportToolStripItem(i, recurCount + 1)) {
      customized.Add(i);
    }
  }
  foreach (var i in customized) c.Items.Remove(i);
}

//-------------------------------------------------------------

void CustomizeReportButton(Button button, int recurCount) {
}

//-------------------------------------------------------------

bool CustomizeReportToolStripItem(ToolStripItem i, int recurCount) {
  Console.WriteLine("".PadLeft(recurCount + 1, '.') + i.GetType() + ":" + i.Name);
  if (i.Name == "pageSetup") {
    return true;
  }
  else if (i.Name == "printPreview") {
    return true;
  }
  return false; ;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top