找回密码
 立即注册

QQ登录

只需一步,快速开始

正指针

注册会员

7

主题

19

帖子

54

积分

注册会员

积分
54
正指针
注册会员   /  发表于:2021-9-6 16:37  /   查看:4093  /  回复:6
100金币
本帖最后由 正指针 于 2021-9-6 16:44 编辑

初次绑定时画面是这样的。(第2列和第3列值不一样时,第三列颜色变黄。)
image.png709417113.png
点击button2按钮时,直接通过修改 单元格的方式 改值 将值改成一样的,这时候 列无色。
image.png931991882.png
点击button3按钮时,通过修改 绑定的数据源  的方式 改值 将值改成一样的,这时候 公式判断值不一致,没按照预想的无色显示。
image.png348227843.png

现有需求 只能通过修改绑定值来改展示画面的值。如何实现 效果。例子见附件。 WindowsFormsApp3.zip (15.33 MB, 下载次数: 584)

最佳答案

查看完整内容

您好,经验证这个不是spread产品的问题,由于绑定的数据源List 不会为更改的项目触发任何事件,所以Spread无法更新这种情况下的条件格式。您可以使用下面的代码来解决 : 另外一个可行的办法时让student类实现INotifyPropertyChanged接口,在其各个属性的set中监听值变化

6 个回复

倒序浏览
最佳答案
最佳答案
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-9-6 16:37:16
来自 3#
您好,经验证这个不是spread产品的问题,由于绑定的数据源List<student> 不会为更改的项目触发任何事件,所以Spread无法更新这种情况下的条件格式。您可以使用下面的代码来解决

  1.     private void button3_Click(object sender, EventArgs e)
  2.     {
  3.       List<Student> a = spdDspQuery1.ActiveSheet.DataSource as List<Student>;
  4.       a[0].Name = "123";
  5.       a[0].Name2 = "123";
  6.       spdDspQuery1.ActiveSheet.DataSource = null;
  7.       spdDspQuery1.ActiveSheet.DataSource = a;
  8.     }
复制代码


另外一个可行的办法时让student类实现INotifyPropertyChanged接口,在其各个属性的set中监听值变化
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-9-6 17:43:20
2#
您好,问题可以重现。这个问题我需要和研发确认后给您回复。可能需要一两天的时间。,请耐心等待一下

此帖暂时保留处理
回复 使用道具 举报
正指针
注册会员   /  发表于:2021-9-9 17:32:56
4#
Richard.Ma 发表于 2021-9-9 13:37
您好,经验证这个不是spread产品的问题,由于绑定的数据源List 不会为更改的项目触发任何事件,所以Spread ...

image.png939937744.png
我修改了以下逻辑
button2 改第一行的第3列。
button3 改第二行的第2列。
如果按照您说的,画面都不会有变换。但实际情况是,第一行变化了,第二行没变化。
image.png33565672.png
如果这时后点击按钮button1 把第二行的第3列的值改为 第2列的初始值时,第二行发生了变化,
image.png687996520.png
好像时公式里只是记录最初绑定单元格时,单元格里的值,然后来计算结果。 WindowsFormsApp3.zip (15.34 MB, 下载次数: 580)
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-9-9 18:18:30
5#
是的,应该就是这样的。
解决这个问题,就是在数据源变化后,重新设置数据源就行了,这样肯定是可以生效的
回复 使用道具 举报
正指针
注册会员   /  发表于:2021-9-14 19:50:59
6#
INotifyPropertyChanged 这个有例子吗?
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-9-15 09:20:51
7#
下面是一个Product类的类似代码,创建的List<Product>即可用于数据绑定,需要注意的是,再这种情况下,在数据源的数据项改变后,仍需要再调用一下spread的refresh方法才行

  1.     public class Product:INotifyPropertyChanged
  2.     {
  3.         private int id;
  4.         private string country;
  5.         private string name;
  6.         private DateTime date;
  7.         private int price;
  8.         private int count;
  9.         private Status status;
  10.         public int Id { get => id; set => id = value; }
  11.         public string Country {  get => country; set {country = value;NotifyPropertyChanged("Country");}}
  12.         public string Name { get => name; set { name = value; NotifyPropertyChanged("Name"); } }
  13.         public DateTime Date { get => date; set { date = value; NotifyPropertyChanged("Date"); } }
  14.         public int Price { get => price; set { price = value; NotifyPropertyChanged("Price"); } }
  15.         public int Count { get => count; set { count = value; NotifyPropertyChanged("Count"); } }
  16.         public Status Status { get => status; set => status = value; }

  17.         public event PropertyChangedEventHandler PropertyChanged;
  18.         protected virtual void NotifyPropertyChanged(string propertyName)
  19.         {
  20.             if (PropertyChanged != null)
  21.             {
  22.                 PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
  23.             }
  24.         }
  25.     }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部