找回密码
 立即注册

QQ登录

只需一步,快速开始

liuyinlong

初级会员

24

主题

59

帖子

448

积分

初级会员

积分
448

活字格认证

liuyinlong
初级会员   /  发表于:2013-4-10 17:42  /   查看:6993  /  回复:7
如图,下边状态栏的合计 随着区域动态选择发生变化,是多选;
QQ截图20130410174223.png

7 个回复

倒序浏览
iceman
社区贡献组   /  发表于:2013-4-10 20:08:00
沙发
回复 1楼liuyinlong的帖子

liuyinlong 你好,
目前 Spread 不具备该功能,不过,我们可以在 fpSpread1_SelectionChanging 事件中手动计算来模式该功能。
回复 使用道具 举报
liuyinlong
初级会员   /  发表于:2013-4-11 15:08:00
板凳
FarPoint.Win.Spread.Model.CellRange cr = e.Range;  
                    int a = cr.Row;
                    int b = cr.RowCount;

                    for (int i = a; i < b + a; i++)
                    {
                        ddz += Convert.ToDouble(this.spdList.ActiveSheet.Cells[i, 9].Text);
                        djs += Convert.ToDouble(this.spdList.ActiveSheet.Cells[i, 10].Text);
                    }
                    lblDZ.Text = ddz.ToString();
                    lblJS.Text = djs.ToString();
你好,单个区域的选择我实现了,但是如图所以的多个区域选择的我没有实现,如果可以的话可不可以麻烦您给我一下 多个区域选择时的 示例代码?
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2013-4-11 17:48:00
地板
回复 3楼liuyinlong的帖子

恩,一个区域实现了,大体代码基本完成了。
可以通过以下代码获取当前选择所有区域:

  1. private void fpSpread1_SelectionChanging(object sender, FarPoint.Win.Spread.SelectionChangingEventArgs e)
  2.         {
  3.             FarPoint.Win.Spread.Model.CellRange[] cr = this.fpSpread1.Sheets[0].GetSelections();

  4.             for (int i = 0; i < cr.Length; i++)
  5.             {
  6.             }
  7.         }
复制代码
回复 使用道具 举报
liuyinlong
初级会员   /  发表于:2013-4-16 08:12:00
5#
回复 4楼iceman的帖子

你好,this.fpSpread1.Sheets[0].GetSelections(); 我这样用之后还是无法实现动态合计,表现为:
(1) 往下拉,停止后,鼠标当前停在的单元格不在计算合计之内 (2)往上拉,停止后,鼠标当前停在的单元格不在计算合计之内 ; 就是动态合计 随着下拉或上拉 总是不是理想的准确合计,麻烦您能不能给一下个实例Demo啊,真的谢谢您了,这个功能对我非常重要,我已经调试很长时间无法实现该功能;谢谢!
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2013-4-16 17:44:00
6#
回复 5楼liuyinlong的帖子

不知道你的代码是如何实现的,请参考:

  1. private void fpSpread1_SelectionChanged(object sender, FarPoint.Win.Spread.SelectionChangedEventArgs e)
  2.         {
  3.             FarPoint.Win.Spread.Model.CellRange[] cr = this.fpSpread1.Sheets[0].GetSelections();

  4.             int sum = 0;
  5.             int cellValue = 0;

  6.             for (int i = 0; i < cr.Length; i++)
  7.             {
  8.                 for (int j = 0; j < cr[i].RowCount; j++)
  9.                 {
  10.                     for (int k = 0; k < cr[i].ColumnCount; k++)
  11.                     {
  12.                         if (this.fpSpread1.Sheets[0].Cells[cr[i].Row + j, cr[i].Column + k].Value != null)
  13.                         {
  14.                             cellValue = Convert.ToInt32(this.fpSpread1.Sheets[0].Cells[cr[i].Row + j, cr[i].Column + k].Text);
  15.                             sum += cellValue;
  16.                             this.toolStripStatusLabel1.Text = sum.ToString();
  17.                         }
  18.                     }
  19.                 }
  20.             }
  21.         }
复制代码
回复 使用道具 举报
liuyinlong
初级会员   /  发表于:2013-4-17 08:11:00
7#
您好,很谢谢您的回复,这样的确可以满足我的部分需求,我想要的是 合计是动态的显示,比如在下拉的过程中合计一直是动态变化的,而不是现在只有下拉选择区域结束才会显示? 我吧这段代码加到spdList_SelectionChanging 中就会出现 我开始提出的问题; 谢谢您了;
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2013-4-17 17:45:00
8#
回复 7楼liuyinlong的帖子

(1) 往下拉,停止后,鼠标当前停在的单元格不在计算合计之内 (2)往上拉,停止后,鼠标当前停在的单元格不在计算合计之内 ;

你好,
鉴于这两种情况,可以把当前鼠标停止的单元格文本累加到 统计结果中。其他操作方法类似于 6# 中代码。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部