找回密码
 立即注册

QQ登录

只需一步,快速开始

fengling2001

金牌服务用户

7

主题

16

帖子

91

积分

金牌服务用户

积分
91

活字格认证

fengling2001
金牌服务用户   /  发表于:2012-12-2 09:55  /   查看:6990  /  回复:3
绑定数据之后,对单元格设置了CellType(NumberCellType),虽然显示的数据位数都没有问题,但是当使用公式计算(SUM(E1:E2))的时候,还是不好使。但是手动双击单元格之后,公式就正常了,不知道为什么?
  1.         fpSpread.Sheets[0].SheetName = "T1";

  2.             List<MyClass> strList = new List<MyClass>();
  3.             List<MyClass> strList1 = new List<MyClass>();

  4.             strList.Add(new MyClass() { P1 = "111" });
  5.             strList.Add(new MyClass() { P1 = "222" });
  6.             strList.Add(new MyClass() { P1 = "333" });
  7.             strList.Add(new MyClass() { P1 = "444" });

  8.             strList1.Add(new MyClass() { P1 = "11" });
  9.             strList1.Add(new MyClass() { P1 = "22" });
  10.             strList1.Add(new MyClass() { P1 = "33" });
  11.             strList1.Add(new MyClass() { P1 = "44" });

  12.             FarPoint.Win.Spread.Data.SpreadDataBindingAdapter data = new FarPoint.Win.Spread.Data.SpreadDataBindingAdapter();
  13.             data.DataSource = strList;
  14.             data.Spread = fpSpread;
  15.             data.SheetName = "T1";

  16.             data.MapperInfo = new FarPoint.Win.Spread.Data.MapperInfo(15,3, strList.Count, 1);
  17.             data.FillSpreadDataByDataSource();
  18.             data.Dispose();


  19.             FarPoint.Win.Spread.Data.SpreadDataBindingAdapter data1 = new FarPoint.Win.Spread.Data.SpreadDataBindingAdapter();
  20.             data1.DataSource = strList1;
  21.             data1.Spread = fpSpread;
  22.             data1.SheetName = "T1";

  23.             data1.MapperInfo = new FarPoint.Win.Spread.Data.MapperInfo(15, 4, strList1.Count, 1);
  24.             data1.FillSpreadDataByDataSource();
  25.             data1.Dispose();

  26.             //单元格类型必须在绑定之后设置才有效
  27.             FarPoint.Win.Spread.CellType.NumberCellType numCellType = new FarPoint.Win.Spread.CellType.NumberCellType();
  28.             numCellType.DecimalPlaces = 2;
  29.             this.fpSpread.ActiveSheet.Cells[15, 3, 15 + strList.Count, 3 + 1].CellType = numCellType;
  30.             this.fpSpread.ActiveSheet.Cells[15, 4, 15 + strList1.Count, 4 + 1].CellType = numCellType;

  31.             for (int t = 15; t <= 15 + strList.Count; t++)
  32.             {
  33.                 CellSumFormula(fpSpread.ActiveSheet.Cells[t - 1, 5], 'D', 1, t);
  34.             }

  35.         private void CellSumFormula(FarPoint.Win.Spread.Cell cell, char startColumn, int span, int row)
  36.         {
  37.             char strEnd = (char)(startColumn + span);
  38.             string strFormula = "SUM(" + startColumn.ToString() + row.ToString() + ":" + strEnd.ToString() + row.ToString() + ")";
  39.             cell.Formula = strFormula;
  40.         }

  41.     public class MyClass
  42.     {
  43.         public string P1 { get; set; }
  44.     }
复制代码

3 个回复

倒序浏览
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-12-3 16:20:00
沙发
回复 1楼fengling2001的帖子

fengling2001  你好

你提到设置公式之后不好使,是指的什么意思呢,是数据格式不对吗,能否提供以下详细的操作步骤。

双击单元格之后会重新格式化单元格的数据。
回复 使用道具 举报
fengling2001
金牌服务用户   /  发表于:2012-12-3 17:21:00
板凳
上面的代码直接运行,求和单元格显示的是0,然后双击Cells[15, 3, 15 + strList.Count, 3 + 1]和Cells[15, 4, 15 + strList1.Count, 4 + 1]其中的单元格,求和公式就会发生作用,得到正确结果
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-12-3 18:04:00
地板
fengling2001 你好

这和你数据源中数据的类型有关,你需要将 public string P1 { get; set; } 修改为 public int P1 { get; set; },最终代码如下:
  1.         private void Form1_Load(object sender, EventArgs e)
  2.         {
  3.             fpSpread1.Sheets[0].SheetName = "T1";

  4.             List<MyClass> strList = new List<MyClass>();
  5.             List<MyClass> strList1 = new List<MyClass>();

  6.             strList.Add(new MyClass() { P1 = 111 });
  7.             strList.Add(new MyClass() { P1 = 222 });
  8.             strList.Add(new MyClass() { P1 = 333 });
  9.             strList.Add(new MyClass() { P1 = 444 });

  10.             strList1.Add(new MyClass() { P1 = 11 });
  11.             strList1.Add(new MyClass() { P1 = 22 });
  12.             strList1.Add(new MyClass() { P1 = 33 });
  13.             strList1.Add(new MyClass() { P1 = 44 });

  14.             FarPoint.Win.Spread.Data.SpreadDataBindingAdapter data = new FarPoint.Win.Spread.Data.SpreadDataBindingAdapter();
  15.             data.DataSource = strList;
  16.             data.Spread = fpSpread1;
  17.             data.SheetName = "T1";

  18.             data.MapperInfo = new FarPoint.Win.Spread.Data.MapperInfo(15, 3, strList.Count, 1);
  19.             data.FillSpreadDataByDataSource();
  20.             data.Dispose();


  21.             FarPoint.Win.Spread.Data.SpreadDataBindingAdapter data1 = new FarPoint.Win.Spread.Data.SpreadDataBindingAdapter();
  22.             data1.DataSource = strList1;
  23.             data1.Spread = fpSpread1;
  24.             data1.SheetName = "T1";

  25.             data1.MapperInfo = new FarPoint.Win.Spread.Data.MapperInfo(15, 4, strList1.Count, 1);
  26.             data1.FillSpreadDataByDataSource();
  27.             data1.Dispose();

  28.             //单元格类型必须在绑定之后设置才有效
  29.             FarPoint.Win.Spread.CellType.NumberCellType numCellType = new FarPoint.Win.Spread.CellType.NumberCellType();
  30.             numCellType.DecimalPlaces = 2;
  31.             this.fpSpread1.ActiveSheet.Cells[15, 3, 15 + strList.Count, 3 + 1].CellType = numCellType;
  32.             this.fpSpread1.ActiveSheet.Cells[15, 4, 15 + strList1.Count, 4 + 1].CellType = numCellType;

  33.             for (int t = 15; t <= 15 + strList.Count; t++)
  34.             {
  35.                 CellSumFormula(fpSpread1.ActiveSheet.Cells[t - 1, 5], 'D', 1, t);
  36.             }

  37.         }

  38.         private void CellSumFormula(FarPoint.Win.Spread.Cell cell, char startColumn, int span, int row)
  39.         {
  40.             char strEnd = (char)(startColumn + span);
  41.             string strFormula = "SUM(" + startColumn.ToString() + row.ToString() + ":" + strEnd.ToString() + row.ToString() + ")";
  42.             cell.Formula = strFormula;
  43.         }

  44.         public class MyClass
  45.         {
  46.             public int P1 { get; set; }
  47.         }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部