找回密码
 立即注册

QQ登录

只需一步,快速开始

Richard.Ma 讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-1-27 15:47  /   查看:4149  /  回复:4
本帖最后由 Richard.Ma 于 2022-3-23 11:10 编辑

Spread提供了一个Spread设计器独立程序,我们可以用它来编辑模板文件供Spread程序使用。

在一些场景中,我们希望使用程序的最终用户也可以使用这个编辑器来进行文件编辑,这样用户也可以使用到设计器中类似于Excel菜单里的丰富功能。这篇博客介绍如何定制自己的Spread设计器,并嵌入到程序中去

引用 FarPoint.Win.Spread.Design.DesignerMain,此命名空间中提供了名为DesignerMain的类,这个和设计器可执行程序和的界面功能是一致的。我们通过继承此控件并进行重写,可以定制自己的设计器,具体操作如下:

1.创建继承Spread设计器的窗体
新建一个类并继承FarPoint.Win.Spread.Design.DesignerMain,此类即可以直接作为窗体启动。展示完整的Spread设计器
  1. class Designer : FarPoint.Win.Spread.Design.DesignerMain
  2.     {

  3.     }
复制代码
需要引用以下dll,其中红色部分的Spread在安装开发包后,可以在列表中找到。
绿色部分为Spread设计器依赖的ComponentOne控件,可以在开发包的如下路径中找到
C:\Program Files (x86)\GrapeCity\Spread.NET 15\Windows Forms\v15.0.20211.0\bin\Designer

image.png716486816.png

运行后效果如下
image.png402791442.png



2.自定义界面
以上界面中,我们对其中的一些属性做了设置,修改了菜单中的保存按钮,和其他的一些设置作为示例
最终的效果如下
image.png770083617.png

下面是修改的代码,通过重写OnLoad方法来修改
  1.         protected override void OnLoad(EventArgs e)
  2.         {
  3.             base.OnLoad(e);

  4.             this.Text = "我的Spread设计器";

  5.             //隐藏右侧属性栏
  6.             this.IsShowPropertyGridValue = false;

  7.             //获取界面的Ribbon菜单,为C1Ribbon对象,具体操作可以参考C1控件文档
  8.             C1Ribbon ribbon = this.Ribbon;

  9.             //窗口中包含的Spread控件
  10.             FpSpread spread=this.Spread;

  11.             //窗体状态栏
  12.             C1StatusBar statusbar = this.StatusBar;

  13.             //设置类Excel主题样式
  14.             C1Theme theme = C1ThemeController.GetThemeByName("Office2016Green", true);
  15.             C1ThemeController.ApplyThemeToControlTree(this, theme);


  16.             //增加一个保存到xxx的菜单项
  17.             var iconset= (this.Ribbon.ApplicationMenu.LeftPaneItems[7] as RibbonButton).IconSet;
  18.             RibbonButton savexxxbutton = new RibbonButton() { Text = "保存为xxx(&S)"};
  19.             savexxxbutton.IconSet.Clear();
  20.             savexxxbutton.IconSet.Add(iconset[0]);
  21.             savexxxbutton.Click += Savebutton_Click;
  22.             this.Ribbon.ApplicationMenu.LeftPaneItems.Insert(7, savexxxbutton);

  23.             //删除菜单下方“输出”按钮
  24.             this.Ribbon.ApplicationMenu.BottomPaneItems.Remove(this.Ribbon.ApplicationMenu.BottomPaneItems[0]);

  25.         }


  26.         private void Savebutton_Click(object sender, EventArgs e)
  27.         {
  28.             SaveFileDialog s = new SaveFileDialog();
  29.             s.Filter = "专用文件(*.xxx)|*.xxx";
  30.             if (s.ShowDialog() == DialogResult.OK)
  31.             {
  32.                 this.Spread.SaveExcel(s.FileName);
  33.             }
  34.         }
复制代码

点击这里下载示例项目: SpreadDesignerDemo.zip (2.79 MB, 下载次数: 570)

4 个回复

倒序浏览
Tom猫
中级会员   /  发表于:2021-8-9 21:26:06
沙发
应该用的上,先收藏
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-8-10 10:18:58
板凳
回复 使用道具 举报
elwin
中级会员   /  发表于:2022-12-3 11:04:48
地板
不能设置数据绑定嘛?
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-12-5 09:13:04
5#
可以设置数据绑定,这个demo仅展示的是自定义设计器

demo中的spread对象,就是封装的spread workbook,你可以对这个来进行表格操作,参考下面的文档进行数据绑定
https://www.grapecity.com/spread ... n-data-binding.html
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部