找回密码
 立即注册

QQ登录

只需一步,快速开始

dapsjj
初级会员   /  发表于:2016-11-17 15:26  /   查看:4516  /  回复:8
C#,spread的数据是从DataSet放进去的,那么如何切断spread的数据源?是把C#取数据的DataSet置为空?还是spread本身有什么属性或方法可以把从DataSet放入spread的数据给清除?ClearRange只是把单元格的内容清空,spread的哪个属性或者哪个方法能把spread置为空?因为后续要判断spread是否有数据,如果有数据,则"修改"按钮可以点击,如果spread没有数据,那么"修改"按钮不可用,请指教!

8 个回复

倒序浏览
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2016-11-18 09:04:42
沙发
首先如果用的DateSet绑定数据,那么DataSet里的数据决定spread显示什么,当spread中的数据被用户修改后,获取到的DataSet也被修改。

您这里的切断指什么?
一般情况下使用绑定,用户点击单元格后,可以获取到行号,根据行号就可以知道这行是否有绑定过数据。
回复 使用道具 举报
dapsjj
初级会员   /  发表于:2016-11-18 09:36:18
板凳
本帖最后由 dapsjj 于 2016-11-18 09:42 编辑
dexteryao 发表于 2016-11-18 09:04
首先如果用的DateSet绑定数据,那么DataSet里的数据决定spread显示什么,当spread中的数据被用户修改后,获 ...

您好,你说的"当spread中的数据被用户修改后,获取到的DataSet也被修改。"spread为啥还能改变DateSet中的东西呢?DataSet是C#执行存储过程得到的,然后再把DataSet的数据放入spread,我不太理解您说的这句。我说的切断意思是"spread本身有什么属性或者方法能让spread解除(清空)刚才执行存储过程后绑定的DataSet的数据"。
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2016-11-18 10:50:44
地板
如果您用的时  fpSpread1.ActiveSheet.DataSource = ds; 的方式绑定数据,那么数据时双向的。
改变table的数据spread会变,修改spread中的数据,ds里的也会同步改变。

如果您不希望使用绑定让数据同步。可以通过循环datatable 的方式将单元格赋值,这样spread就和ds没有关系了。

回复 使用道具 举报
dapsjj
初级会员   /  发表于:2016-11-18 11:02:47
5#
本帖最后由 dapsjj 于 2016-11-18 11:06 编辑
dexteryao 发表于 2016-11-18 10:50
如果您用的时  fpSpread1.ActiveSheet.DataSource = ds; 的方式绑定数据,那么数据时双向的。
改变table的 ...
您好,我这种是属于循环的吧?与dataset是无关的吧?
  1. private void frm1_Load(object sender, EventArgs e)
  2.         {
  3.             try
  4.             {
  5.                 connPCDB = cp.GetConString();
  6.                 SqlHelper sh = new SqlHelper(connPCDB);
  7.                 sh.Param = sh.GetNewParam();
  8.                 sh.Param.AddParam("@DISP_TYPE", SqlDbType.Int, 0);
  9.                 DataSet ds = sh.ExecuteDatasetSP("GetData", ref sh.Param, 3000);
  10.                 setSpreadData(ds.Tables[0]);
  11.             }
  12.             catch (Exception ex)
  13.             {
  14.                
  15.             }
  16.     }
  17.    

  18.         private void setSpreadData(DataTable spdt)
  19.         {
  20.             if (this.sprdMain.ActiveSheet.RowCount > 0)
  21.             {
  22.                 this.sprdMain.ActiveSheet.Rows.Count = 0;
  23.             }
  24.             this.sprdMain.ActiveSheet.Rows.Count = spdt.Rows.Count;


  25.             DataRowCollection rows = spdt.Rows;
  26.             int rowCount = rows.Count;
  27.             int nowRow = 0;
  28.             for (int i = 0; i < rowCount; i++)
  29.             {
  30.                 sprdMain.ActiveSheet.Cells[nowRow, 0].Value = rows[i]["A列"].ToString();
  31.                 sprdMain.ActiveSheet.Cells[nowRow, 1].Value = rows[i]["B列"].ToString();
  32.                 sprdMain.ActiveSheet.Cells[nowRow, 2].Value = rows[i]["C列"].ToString();
  33.                 sprdMain.ActiveSheet.Cells[nowRow, 3].Value = rows[i]["D列"].ToString();

  34.                
  35.                 nowRow++;
  36.             }
  37.         
  38.         }
复制代码

回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2016-11-18 13:41:27
6#
对,这样是与数据源dataTable 无关的。删除spread中的数据不会影响数据源

评分

参与人数 1满意度 +5 收起 理由
dapsjj + 5 赞一个!

查看全部评分

回复 使用道具 举报
dapsjj
初级会员   /  发表于:2016-11-18 14:05:28
7#
dexteryao 发表于 2016-11-18 13:41
对,这样是与数据源dataTable 无关的。删除spread中的数据不会影响数据源

谢谢!
回复 使用道具 举报
dapsjj
初级会员   /  发表于:2016-11-18 14:05:29
8#
dexteryao 发表于 2016-11-18 13:41
对,这样是与数据源dataTable 无关的。删除spread中的数据不会影响数据源

谢谢!
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2016-11-18 14:11:07
9#
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部