找回密码
 立即注册

QQ登录

只需一步,快速开始

luoqingyu

注册会员

15

主题

31

帖子

92

积分

注册会员

积分
92

活字格认证

luoqingyu
注册会员   /  发表于:2015-7-14 09:27  /   查看:8719  /  回复:13
表格用程序添行    spread1.Sheets(0).AddRows(5, 1),又给cell编程添加数据后    spread1.Sheets(0).SetValue(5, 0, "ABCE"),再更新到数据库出错。数据库提示,显示该CELL的内容是NULL(实际表格显示了数据“ABCD").但若添加后,当我再手动编辑CELL后,再更新到数据库,就OK。请问,是什么原因?谢谢!

13 个回复

倒序浏览
frank.zhang
社区贡献组   /  发表于:2015-7-14 10:36:00
沙发
您好,
我们测试后,没有能够重现您的问题,您看下我是否依赖了一些步骤。
1.绑定access数据
  1. this.订单TableAdapter.Fill(this.nWind_CHSDataSet1.订单);
复制代码
2.添加行列和数据
  1.         private void button1_Click(object sender, EventArgs e)
  2.         {
  3.             fpSpread1.Sheets[0].AddRows(5, 1);
  4.             fpSpread1.Sheets[0].SetValue(5, 0, 123);
  5.             fpSpread1.Sheets[0].SetValue(5, 1, "222");
  6.         }
复制代码

3.插入数据库
  1.             var cmd = new OleDbCommand();
  2.             var dbcon = new OleDbConnection(ConnStr);
  3.             dbcon.Open();
  4.             var colCount = _sv.ColumnCount - 2;
  5.             var curRow = _sv.ActiveRowIndex;
  6.             //通过列头文本设置参数
  7.             for (var i = colCount-1; i >= 0; i--)
  8.             {
  9.                     var pram = new OleDbParameter(_sv.Columns[i].Label, _sv.Cells[curRow, i].Value);
  10.                     cmd.Parameters.Add(pram);
  11.             }
复制代码

您如果方便的话,最好提供一个能够重现这个问题的例子程序。可以节省我们重现问题的时间。
回复 使用道具 举报
luoqingyu
注册会员   /  发表于:2015-7-14 11:03:00
板凳
你好!
我的程序和你提供的程序是一摸一样。
fpSpread1.Sheets[0].AddRows(5, 1);
fpSpread1.Sheets[0].SetValue(5, 0, 123);

添加后,在表格能正常显示。但我用UPDATA更新到数据库时,提示该单元格是NULL.(与数据库应该是无关)
但若鼠标点击单元格后,再用UPDATA更新到数据库时,就出错。
谢谢
回复 使用道具 举报
luoqingyu
注册会员   /  发表于:2015-7-14 11:04:00
地板
你好!
我的程序和你提供的程序是一摸一样。
fpSpread1.Sheets[0].AddRows(5, 1);
fpSpread1.Sheets[0].SetValue(5, 0, 123);

添加后,在表格能正常显示。但我用UPDATA更新到数据库时,提示该单元格是NULL.(与数据库应该是无关)
但若鼠标点击单元格后,再用UPDATA更新到数据库时,就正常
谢谢
回复 使用道具 举报
luoqingyu
注册会员   /  发表于:2015-7-14 11:04:00
5#
刚发错了。鼠标点击一下单元格再更新到数据库,就正常。
回复 使用道具 举报
luoqingyu
注册会员   /  发表于:2015-7-14 11:10:00
6#
在老版本中,用程序修改单元格内容后,必须用ss_Detail.SetCellDirtyFlag(-1, ss_Detail.Row, True)标记后才能是真正能保存。
现在的.NET的版本是不是也有类似的函数?我没找到?
谢谢。
回复 使用道具 举报
luoqingyu
注册会员   /  发表于:2015-7-14 11:28:00
7#
目前的问题,是fpSpread1.Sheets[0].AddRows(5, 1);
fpSpread1.Sheets[0].SetValue(5, 0, 123);
这两个语句后,虽然表上显示的是单元后更新的值。
(我用GEVALUE也看了。返回也有数),
但要鼠标点击一下单元格后,这个值才能更新到帮定的数据集。
我觉得,是不是单元格手动编辑和程序赋值是有区别的。
麻烦看看,是否有什么刷新类的函数。

谢谢。
回复 使用道具 举报
luoqingyu
注册会员   /  发表于:2015-7-14 11:31:00
8#
简单点说。就是fpSpread1.Sheets[0].AddRows(5, 1);后,
用鼠标填充单元格数据,就正常更新到数据库。
若用
fpSpread1.Sheets[0].SetValue(5, 0, 123);
就不行(但表格单元能正常显示123)。,
回复 使用道具 举报
frank.zhang
社区贡献组   /  发表于:2015-7-14 14:55:00
9#
您好,
我将例子程序上传至论坛,您看下是否遗漏。


Spread_Win_DataSource.zip (230.38 KB, 下载次数: 509)
回复 使用道具 举报
luoqingyu
注册会员   /  发表于:2015-7-15 14:03:00
10#
多谢回复。
其实,fpSpread1.Sheets[0].AddRows(5, 1);
fpSpread1.Sheets[0].SetValue(5, 0, 123);
都正常,表格也能显示。主要是该两句执行完毕后,再更新到数据库时,显示是空(本应该是“123”)。只有数据点击变成编辑模式时,再更新数据库就OK了。
后来,我用程序编程该单元格为编辑模式。
问题是解决了。但心里怪怪的。总觉得不应该这样。
我的平台是VS2013,SQL

     Dim jj As Integer
        jj = ProjectList.Sheets(0).GetLastNonEmptyRow(1)
        ProjectList.Sheets(0).AddRows(jj + 1, 1)
        ' ProjectList.Sheets(0).AddUnboundRows(jj + 1, 1)’不绑定到数据库
        'ProjectList.Sheets(0).SetValue(jj + 1, 0, "AB2CE")

        ProjectList.Sheets(0).SetText(jj + 1, 0, "AB32CE")


        '备忘:手动修改单元格和编程修改单元是有别的,表格显示数据与内存不一致。这是Spread的BUG只有双击单元格,数据才能更新到记录集
        '这里采用编程模拟双击单元格
        ProjectList.Sheets(0).SetActiveCell(jj + 1, 0)
        ProjectList.EditMode = True
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部