找回密码
 立即注册

QQ登录

只需一步,快速开始

moonlight108

初级会员

11

主题

65

帖子

465

积分

初级会员

积分
465

活字格认证

[已处理] 公式设置

moonlight108
初级会员   /  发表于:2014-2-17 10:47  /   查看:7657  /  回复:9
看demo,条件公式可以实现第一种效果,我需要的效果是第二种。
我的需求是1、图标放在数据后面
2、公式该怎么写呢?不是简单的大于或小于什么数据,而是同上期或上几期数据相比(上期或上几期的数据很可能不出现在表格中)。

QQ截图20140217103227.png

QQ截图20140217103253.png

9 个回复

倒序浏览
roger.wang
社区贡献组   /  发表于:2014-2-17 14:23:00
沙发
回复 1楼moonlight108的帖子

请问,是哪个版本的产品?

Spread Winform 7.0吗?
回复 使用道具 举报
moonlight108
初级会员   /  发表于:2014-2-17 16:49:00
板凳
回复 2楼roger.wang的帖子

对。而且,设置的结果,Web也要同样展示
回复 使用道具 举报
moonlight108
初级会员   /  发表于:2014-2-18 14:28:00
地板
回复 2楼roger.wang的帖子

怎么没回应了呢?
我想要的是图标在数据后面。因为图标在前面有可能理解成了上升或下降了多少值,图标在后面,是表示上升或下降趋势。还有一个问题,画波形图,数据源可以不写入Spread sheet的单元格里吗?比如,直接对应一个数据数组?
回复 使用道具 举报
roger.wang
社区贡献组   /  发表于:2014-2-18 15:07:00
5#
回复 4楼moonlight108的帖子

1 Spread提供的默认图标是在数据前面的, 如要修改到后面,请集成IconSetConditionalFormattingRule实现PaintCell 自绘实现。

2 比较的数据,可以不再Spread Sheet里面。

参考代码如下:

  1. public partial class Form1
  2.     {
  3.         private void InitIcon()
  4.         {
  5.             fpSpread1.Sheets[0].Cells[0, 0].Value = 3;
  6.             fpSpread1.Sheets[0].Cells[1, 0].Value = 2;
  7.             fpSpread1.Sheets[0].Cells[1, 1].Value = 10;
  8.             fpSpread1.Sheets[0].Cells[0, 2].Value = 1;

  9.             // >=10  up icon
  10.             // 5~10  equal icon
  11.             // < 5   down icon
  12.             CellRange celRange1 = new FarPoint.Win.Spread.Model.CellRange(0, 0, 2, 2);
  13.             FarPoint.Win.Spread.IconSetConditionalFormattingRule rule = new MyClass(ConditionalFormattingIconSetStyle.ThreeColoredArrows);
  14.             rule.ShowConditionalFormatOnly = false;  // true 仅显示图标
  15.             rule.IconRuleSet.Add(new ConditionalFormattingIconValue(10, ConditionalFormattingValueType.Number, true));
  16.             rule.IconRuleSet.Add(new ConditionalFormattingIconValue(5, ConditionalFormattingValueType.Number, false));

  17.             ConditionalFormatting IconSetCF = new ConditionalFormatting(celRange1, rule);  
  18.             fpSpread1.Sheets[0].Models.ConditionalFormatting.Add(IconSetCF);
  19.         }
  20.     }

  21.     public class MyClass : IconSetConditionalFormattingRule
  22.     {
  23.         public MyClass(ConditionalFormattingIconSetStyle iconSetStyle) : base(iconSetStyle) { }

  24.         public override PrePaintTextResult PaintCell(System.Drawing.Graphics g, System.Drawing.Rectangle r, Appearance appearance, object value, bool isSelected, bool isLocked, float zoomFactor)
  25.         {
  26.             //图标: this.IconRuleSet[0].Value;
  27.             //条件   this.IconRuleSet[0].Value;

  28.             return base.PaintCell(g, r, appearance, value, isSelected, isLocked, zoomFactor);
  29.         }
  30.     }
复制代码
回复 使用道具 举报
moonlight108
初级会员   /  发表于:2014-2-18 15:54:00
6#
回复 5楼roger.wang的帖子

谢谢,不过还是不会实现PaintCell 自绘。能再详细点吗?
问题1:问题简化成这样:单元格是字母“u”则用向上绿箭头表示,字母&quot;d&quot;用向下红箭头表示,字母&quot;p&quot;用向右黄箭头表示。
问题2:画波形图,数据源可以不来自于Spread sheet的单元格里吗?比如,直接对应一个数据数组?
回复 使用道具 举报
roger.wang
社区贡献组   /  发表于:2014-2-19 09:25:00
7#
回复 6楼moonlight108的帖子

问题1:在PaintCell函数中,您可以拿到下面API接口:
            Graphics g: 画笔
            Rectangle r:绘画的单元格
            object value: 当前单元格数据
            //图标: this.IconRuleSet[0].Value; (eg: 上绿箭头、下红箭头、右黄箭头)
          //条件   this.IconRuleSet[0].Value;   (eg: value>=10, 10 > value >=5, 5< value)
  基于上面的API接口,参考下.net GDI+资料,可实现图标在右侧效果,即先画数字、再画图标。
问题2: 不可以。 Spread的波形图需要数据来源单元格里。
回复 使用道具 举报
moonlight108
初级会员   /  发表于:2014-2-22 10:46:00
8#
回复 7楼roger.wang的帖子

继承IconSetConditionalFormattingRule实现PaintCell 自绘实现,重载后不是所有所有图标都在后面了?
可能我原来没说明白,Spread提供的默认图标是在数据前面的这个功能我还是要保留的,因为比如排名提高或下降了几位,就需要图标在前面。我想控制图标在前或在后。

还有一个问题,图标要在后的话,由于项目需求,数字必须是右对齐,我现在能实现的只能是把数字和图标一起当图片画出来。虽然效果有了,但实际上单元格里不是数据而是图片了,也就不能排序了。
回复 使用道具 举报
moonlight108
初级会员   /  发表于:2014-2-24 15:30:00
9#
回复 7楼roger.wang的帖子

请解惑
回复 使用道具 举报
roger.wang
社区贡献组   /  发表于:2014-2-24 15:53:00
10#
回复 9楼moonlight108的帖子

能把您实现的功能,发过来吗?  

我看看您目前进展到哪一步了?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部