找回密码
 立即注册

QQ登录

只需一步,快速开始

lh8350

论坛元老

33

主题

80

帖子

2万

积分

论坛元老

积分
23275

活字格认证

[已处理] 拖动填充问题

lh8350
论坛元老   /  发表于:2012-8-5 00:18  /   查看:9862  /  回复:13
demo.rar (159.73 KB, 下载次数: 632)

13 个回复

倒序浏览
lh8350
论坛元老   /  发表于:2012-8-6 15:48:00
沙发
这个问题很棘手,有朋友知道怎么回事儿吗?
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-8-6 15:56:00
板凳
lh8350 你好

从现在的情况来看,有可能是因为同时使用AllowDragFill和AutoFilter造成冲突,我正在和产品部门确认该问题是不是产品的缺陷,明天一有消息我会给你回帖。
回复 使用道具 举报
lh8350
论坛元老   /  发表于:2012-8-6 16:30:00
地板
好的,谢谢dof,辛苦啦!
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-8-8 17:13:00
5#
lh8350 你好

经过与产品部门最终确认,同时设置AllowDragFill和AutoFilter为true,的却会出现你遇到的问题,已经将该问题确认为是产品的Bug,给你使用带来的不便实在抱歉。
回复 使用道具 举报
lh8350
论坛元老   /  发表于:2012-8-8 17:17:00
6#
好的,谢谢!现在客户要求实现这个功能,要怎么办呢?bug可以解除吗?
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-8-8 17:56:00
7#
现在,我在考虑取消默认的拖动填充功能,并在DragFillBlock事件中自己实现填充功能。

你也可以先调试一下:
  1.     private void fpSpread1_DragFillBlock(object sender, FarPoint.Win.Spread.DragFillBlockEventArgs e)    {        e.Cancel = true;        //添加自己的填充逻辑    }
复制代码
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-8-10 18:43:00
8#
回复 7楼dof的帖子

现在的解决方法是在DragFillBlock事件中,自己实现拖动填充功能,比如向右拖动可以使用下面的代码来实现:
  1.     private void fpSpread1_DragFillBlock(object sender, FarPoint.Win.Spread.DragFillBlockEventArgs e)
  2.     {
  3.         if (e.Direction == FarPoint.Win.Spread.FillDirection.Left || e.Direction == FarPoint.Win.Spread.FillDirection.Right)
  4.         {
  5.             e.Cancel = true;

  6.             switch (e.Direction)
  7.             {
  8.                 case FarPoint.Win.Spread.FillDirection.Down:
  9.                     break;
  10.                 case FarPoint.Win.Spread.FillDirection.Left:
  11.                     break;
  12.                 case FarPoint.Win.Spread.FillDirection.Right:
  13.                     int i = 0;
  14.                     int l_c_count = 0;
  15.                     int c_count = e.ColumnEnd - e.ColumnBegin + 1;
  16.                     int r_count = e.RowEnd - e.RowBegin + 1;
  17.                     int c_count_s = (e.NumberToCopy % c_count == 0 ? e.NumberToCopy / c_count : e.NumberToCopy / c_count + 1);
  18.                     CellRange fRange = new CellRange(e.RowBegin, e.ColumnBegin, r_count, c_count);
  19.                     CellRange tRange;

  20.                     for (; i < c_count_s - 1; ++i)
  21.                     {
  22.                         tRange = new CellRange(e.RowBegin, e.ColumnEnd + i * c_count + 1, r_count, c_count);
  23.                         CopyCellRangeText(fRange, tRange);
  24.                     }

  25.                     l_c_count = (e.NumberToCopy % c_count == 0 ? c_count : e.NumberToCopy % c_count);
  26.                         
  27.                     tRange = new CellRange(e.RowBegin, e.ColumnEnd + i * c_count + 1, r_count, l_c_count);
  28.                     CopyCellRangeText(fRange, tRange);

  29.                     break;
  30.                 case FarPoint.Win.Spread.FillDirection.Up:
  31.                     break;
  32.                 default:
  33.                     break;
  34.             }

  35.             CellRange cr = fpSpread1.ActiveSheet.GetSelection(0);
  36.         }
  37.     }
复制代码
回复 使用道具 举报
lh8350
论坛元老   /  发表于:2012-8-22 09:57:00
9#
CopyCellRangeText(fRange, tRange);
这个函数是怎么写的呢?
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-8-22 10:06:00
10#
  1.     private void CopyCellRangeText(CellRange fRange, CellRange tRange)
  2.     {
  3.         for (int r = 0; r < tRange.RowCount; r++)
  4.         {
  5.             for (int c = 0; c < tRange.ColumnCount; c++)
  6.             {
  7.                 fpSpread1.ActiveSheet.Cells[tRange.Row + r, tRange.Column + c].Text = fpSpread1.ActiveSheet.Cells[fRange.Row + r, fRange.Column + c].Text;
  8.             }
  9.         }
  10.     }
复制代码
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部