Пример #1
0
 /// <summary>
 /// 添加一个报表。
 /// </summary>
 /// <param name="report">报表实体。</param>
 public void AddReport(Report report)
 {
     #region 如果是通过双击报表树来添加,那么判断当前报表页中是否已存在该报表,若是,则将该报表页置于前端,并返回。
     foreach (ReportTabPage tabPage in TabPages)
     {
         //对于新建的报表,ID都是空,所以需要加上ID是否为空的判断。
         //如果为空,那么就是新建报表,而不是从左侧报表树双击而来。
         if (tabPage.Report.ID == report.ID && report.ID != string.Empty)
         {
             SelectedTab = tabPage;
             return;
         }
     }
     #endregion
     //新建报表页。之所以没有把报表实体放到构造函数中,是因为TabPage没有Load事件,无法把初始化TabPage中控件的函数自动执行,所以只能在最后手动执行。
     //如果写到构造函数中,那么会造成TabPage中控件的事件无法注册到TabPage上。
     ReportTabPage reportTabPage = new ReportTabPage();
     TabPages.Add(reportTabPage);
     //设置报表页的图片。
     reportTabPage.ImageIndex = 0;
     //绑定报表页的各种事件。
     reportTabPage.GlobalValueChanged             += GlobalValueChanged;
     reportTabPage.AskForGlobalValueToolStripItem += AskForGlobalValueToolStripItem;
     reportTabPage.ProvideToolStripMenu           += ProvideToolStripMenu;
     reportTabPage.ShowStatusStripHelp            += ShowStatusStripHelp;
     //手动执行初始化。
     reportTabPage.SetReport(report);
     //将新增的报表页置于前端。
     SelectedTab = reportTabPage;
 }
Пример #2
0
        private void CloseTabPage(ReportTabPage tabPage)
        {
            int  tabPageIndex          = 0;
            bool needRefreshReportTree = false;

            for (int i = 0; i < TabPages.Count; i++)
            {
                if (TabPages[i] == tabPage)
                {
                    tabPageIndex = i;
                    break;
                }
            }
            if (tabPage.IsEditing)
            {
                DialogResult dr = MessageBox.Show("是否将更改保存到 " + tabPage.Text.Substring(0, tabPage.Text.Length - 1) + "?", "保存", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
                if (dr == DialogResult.Cancel)
                {
                    return;
                }
                if (dr == DialogResult.Yes)
                {
                    int i = tabPage.Save();
                    //如果未保存成功,则返回。
                    if (i < 0)
                    {
                        return;
                    }
                    //若保存成功,则需刷新报表树。
                    needRefreshReportTree = true;
                }
            }
            //防止闪烁,将removeReportTabPageByCode置为true。参见OnSelecting方法。
            removeReportTabPageByCode = true;
            TabPages.Remove(tabPage);
            removeReportTabPageByCode = false;
            //通知窗体有报表被关闭。主要用于当界面已经没有报表时,将焦点置于树,以达到清空工具栏的目的。
            if (ReportTablePageClosed != null)
            {
                ReportTablePageClosed(this, tabPage, needRefreshReportTree);
            }
            //如果被关闭页在中间,则将它右侧的页置于前端。
            if (TabPages.Count > tabPageIndex)
            {
                SelectedIndex = tabPageIndex;
            }
            //否则,将最后一页置于前端。
            else
            {
                SelectedIndex = TabPages.Count - 1;
            }
        }
Пример #3
0
        /// <summary>
        /// 保存当前显示的报表。
        /// </summary>
        /// <returns>大于0为保存成功。</returns>
        public int Save()
        {
            //如果当前没有选中的报表页,则返回。
            if (SelectedTab == null)
            {
                return(0);
            }
            ReportTabPage tabPage = SelectedTab as ReportTabPage;

            //如果处于编辑状态,则保存。对于没有修改过的,不保存。
            if (tabPage.IsEditing)
            {
                return(tabPage.Save());
            }
            return(0);
        }
Пример #4
0
        /// <summary>
        /// 预览当前显示的报表。
        /// </summary>
        public void Preview()
        {
            //如果当前没有选中的报表页,则返回。
            if (SelectedTab == null)
            {
                return;
            }
            ReportTabPage tabPage = SelectedTab as ReportTabPage;

            //预览前,先保存。因为保存时可以进行各种校验,这样便可以保证预览系统显示的不是一个有问题的报表。
            if (tabPage.IsEditing)
            {
                int i = tabPage.Save();
                //保存成功,则预览报表。
                if (i > 0)
                {
                    tabPage.Preview();
                }
            }
        }
Пример #5
0
        /// <summary>
        /// 关闭当前显示在前端的报表页。
        /// </summary>
        private void CloseTabPage()
        {
            ReportTabPage tabPage = SelectedTab as ReportTabPage;

            CloseTabPage(tabPage);
        }