7

ReportViewer ツールバーの WinForms バージョンのツールバーを変更する方法について、良いアイデアを持っている人はいますか? つまり、いくつかのボタンとバリウスを削除したいのですが、そこにあるものを変更するのではなく、まったく新しいツールバーを作成することが解決策のようです。

同様に、Excel へのエクスポートを削除する必要があり、次のようにしました。

  // 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);
    }
  }

あなたが私に尋ねると、少しトリッキーです.toolbarbuttonsを削除するには、ReportViewer内のControl配列を反復処理し、ボタンのVisibleプロパティを非表示に変更する方法が考えられますが、常にリセットされるため、良い方法..

ところで、MS に新しいバージョンが付属するのはいつですか?

4

8 に答える 8

8

うん。少しトリッキーな方法でそれを行うことができます。ズーム レポートに倍率を追加するタスクがありました。私はこのようにしました:

    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;
            }
        }
    }
于 2008-12-10T11:05:05.587 に答える
7

ReportViewer コントロールからツールバーを取得します。

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

新しいアイテムを追加:

toolStrip.Items.Add(...)
于 2009-11-05T19:43:43.910 に答える
4

どのボタンを表示したいかを設定するための多くのプロパティがあります。

たとえば、ShowBackButtonShowExportButtonShowFindControlsなどです。ヘルプで確認してください。すべて「表示」で始まります。

しかし、そうです、新しいボタンを追加することはできません。これを行うには、独自のツールバーを作成する必要があります。

新しいバージョンとはどういう意味ですか? すでに2008 SP1バージョンがあります。

于 2008-09-22T13:16:43.370 に答える
3

もう1つの方法は、実行時にjavascriptを介して生成されたHTMLを操作することです。あまりエレガントではありませんが、生成されたHTMLを完全に制御できます。

于 2009-11-06T18:48:16.310 に答える
2

VS2013 web ReportViewer V11 (rv として表示) の場合、以下のコードはボタンを追加します。

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;
                                }
                            }
                        }
                    }
                }
            }
        }
    }
于 2015-03-31T15:45:10.907 に答える
1

私は長い間この質問をしていました.私は長いネクタイの後に答えを見つけました.私が使用したkowledgeの主なソースはこのwebpegaでした.結果。

ReportViewer クラスを使用する代わりに、新しいクラスを作成する必要があります。私の場合、ReportViewerPlus という名前を付けました。次のようになります。

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]);  
            }   
        }
    }
}

クラスのコンストラクターにボタンを直接追加する必要があり、デザイナーでボタンを構成できます。

これが結果の写真です。完璧ではありませんが、行くには十分です(安全なリンクを誓いますが、自分の写真を投稿することはできません。十分な評判がありません)。

http://prntscr.com/5lfssj

クラスのコードを注意深く見ると、多かれ少なかれそれがどのように機能するかがわかります。変更を加えて、ツールバーの他のサイトでそれを確立できるようにすることができます。

これまで私を助けてくれてありがとう、これが多くの人に役立つことを願っています!

于 2014-12-27T12:49:46.613 に答える
0

通常、変更したい場合は、独自のツールバーを作成することを想定しています。ボタンを削除するためのソリューションは、それが必要なすべての場合はおそらく機能しますが、独自のボタンを追加したい場合は、おそらく弾丸を噛んで代替品を作成する必要があります.

于 2008-09-22T13:10:33.057 に答える