找回密码
 立即注册

QQ登录

只需一步,快速开始

roger.wang
社区贡献组   /  发表于:2014-5-16 11:30  /   查看:7239  /  回复:2
问题描述:使用 Spread制作交叉报表时,需要在单元格中画对角线实现复合表头的功能。
问题解答:可以使用GetCellRectangle方法来获取单元格所在矩形,进而绘制线。
关键代码:

  1.         ///<summary>
  2.         ///通过计算单元格的长度和宽度来计算 LineShape 的起始位置和角度
  3.         ///</summary>
  4.         ///<param name="startRowIndex">起始行</param>
  5.         ///<param name="startColIndex">起始列</param>
  6.         ///<param name="endRowIndex">结束行</param>
  7.         ///<param name="endColIndex">结束列</param>
  8.         ///<returns>返回 LineShape 所在矩形</returns>
  9.         private Rectangle CaculateRectangle(int startRowIndex, int startColIndex, int endRowIndex, int endColIndex)
  10.         {
  11.             float height = 0;
  12.             float width = 0;
  13.             for (int i = startRowIndex; i <= endRowIndex; i++)
  14.             {
  15.                 height += this.fpSpread1.Sheets[0].Rows[i].Height;
  16.             }

  17.             for (int i = startColIndex; i <= endColIndex; i++)
  18.             {
  19.                 width += this.fpSpread1.Sheets[0].Columns[i].Width;
  20.             }
  21.             Rectangle cellRec = this.fpSpread1.GetCellRectangle(0, 0, startRowIndex, startColIndex);
  22.             Point startPositoin = new Point(cellRec.Left -             (int)this.fpSpread1.Sheets[0].SheetCorner.Columns[0].Width, cellRec.Top - (int)this.fpSpread1.Sheets[0].SheetCorner.Rows[0].Height);

  23.             Rectangle rec = newRectangle(startPositoin, newSize((int)width, (int)height));
  24.             return rec;
  25.         }
复制代码


效果截图:


示例下载:点击下载

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

2 个回复

倒序浏览
刘君
中级会员   /  发表于:2016-11-2 08:52:49
沙发
请问一下每个表单的线条(或形状)是否有一个集合,可能通过代码访问这个集合?
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2016-11-2 17:49:45
板凳
在对应专区已回复
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部