找回密码
 立即注册

QQ登录

只需一步,快速开始

一萧一剑

中级会员

30

主题

70

帖子

650

积分

中级会员

积分
650

活字格认证微信认证勋章元老葡萄

一萧一剑
中级会员   /  发表于:2015-7-2 10:52  /   查看:9983  /  回复:16
现在碰到一个问题,就是Spread加载设置好的下拉框,在后台获取下拉框的值,获取不到,
         一般情况都正常的,只是偶尔有这种情况,然后断点调试了几次,都是null值,
         代码什么都没有改变的情况下,又有值了。这个问题无法重现,只是贴了部分代码,
        请帮忙看看,哪有问题,或者有没有这方面的案例,或者其他建议。

     1)  设置下拉框默认值绑定:
            string[] strMoneyText;
            strMoneyText = new String[] { "RMB NO VAT", "USD", "EUR", "HKD" };
            string[] strMoneyValue;
            strMoneyValue = new String[] { "RMB", "USD", "EUR", "HKD" };
            FarPoint.Web.Spread.ComboBoxCellType cbMoney = new FarPoint.Web.Spread.ComboBoxCellType(strMoneyText,strMoneyValue);
            //显示下拉框
            cbMoney.ShowButton = true;
            FpSpreadGV.ActiveSheetView.Columns[13].CellType = cbMoney;
    2) 绑定数据:
             这边是实际情况绑定了69条,断点也是69条
             FpSpreadGV.DataSource = dt;
             FpSpreadGV.DataBind();
    3)获取第50条的时候,值为null (49以前都有值,没有就是默认值:RMB),50以后全是null
             FpSpreadGV.ActiveSheetView.Cells[i, 13].Value.ToString();
        就是调试了多次断点以后,又获取到了,找不到原因
技术改变世界

16 个回复

倒序浏览
iceman
社区贡献组   /  发表于:2015-7-2 12:03:00
沙发
回复 1楼一萧一剑的帖子

请问当前您是通过什么方式获取的?后台 buttoncommand 事件还是前台的 OnClientChanged  事件?如果后台获取有问题,我建议您可以尝试下前台 OnClientChanged   事件获取,comboboxcelltype 在前台是以 select 形式渲染的。
回复 使用道具 举报
一萧一剑
中级会员   /  发表于:2015-7-3 10:55:00
板凳
回复 2楼iceman的帖子

自定义的保存和提交按钮
protected override void Render(HtmlTextWriter writer)
        {              
Button btn1 = new Button();
                 btn1.ID = "btnSubmit";
                 btn1.Text = "提 交";
                 btn1.Width = 65;
                 btn1.Attributes.Add("class", "btn_2k3");
                 btn1.Attributes.Add("onclick", "return SubmitButtonClick()");
                 cell1.Controls.Add(btn1);
                 table.Rows[0].Cells.Add(cell1);

                 Button btn2 = new Button();
                 btn2.ID = "btnSave";
                 btn2.Text = "保存";
                 btn2.Width = 65;
                 btn2.Attributes.Add("class", "btn_2k3");
                 btn2.Attributes.Add("onclick", ClientScript.GetPostBackEventReference(FpSpreadGV, "btnSave,-1,-1") + "; return false;");
                 cell1.Controls.Add(btn2);
                 table.Rows[0].Cells.Add(cell1);
}

点击保存或者提交按钮的话,后台这样获取值插入数据库保存,根据用户反应是数据多的时候才提交不了,
数据少的时候没有问题, 如何在点击保存或者提交按钮时,调用 OnClientChanged方法?怎么使用?
for (int i = 0; i < FpSpreadGV.Rows.Count; i++)
                {
                        entity.strCurrency = FpSpreadGV.ActiveSheetView.Cells[i, 13].Value.ToString();
}
技术改变世界
回复 使用道具 举报
一萧一剑
中级会员   /  发表于:2015-7-3 11:09:00
地板
刚才又有用户反应该情况,就是每页显示50条记录,当数据超过50条记录,有分页的时候,提交就提交不了,就是后台获取的值是null,
如果在一页显示全部记录,就没有这个问题,看看如何解决
技术改变世界
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2015-7-3 17:27:00
5#
回复 4楼一萧一剑的帖子

好的问题我了解了,我会按照你的描述尝试重现问题。有进展会反馈给你
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2015-7-7 13:48:00
6#
回复 1楼一萧一剑的帖子

1# 问题,我理解您的意思是绑定数据源后无法取到第二页数据的值,这样理解正确吗?
我通过以下代码并没有重现问题:

  1. protected void Page_Load(object sender, EventArgs e)
  2.         {
  3.             if (IsPostBack)
  4.             {
  5.                 return;
  6.             }
  7.             DataTable dt = new DataTable();
  8.             for (int i = 0; i < 13; i++)
  9.             {
  10.                 dt.Columns.Add("col"+i.ToString());
  11.             }

  12.             for (int i = 0; i < 60; i++)
  13.             {
  14.                 dt.Rows.Add(i.ToString(),i.ToString(),i.ToString(),"RMB",i.ToString(),i.ToString(),i.ToString(),i.ToString(),i.ToString(),i.ToString(),i.ToString(),i.ToString(),i.ToString());
  15.             }


  16.             FpSpreadGV.DataSource = dt;
  17.             FpSpreadGV.DataBind();

  18.             string[] strMoneyText;
  19.             strMoneyText = new String[] { "RMB NO VAT", "USD", "EUR", "HKD" };
  20.             string[] strMoneyValue;
  21.             strMoneyValue = new String[] { "RMB", "USD", "EUR", "HKD" };
  22.             FarPoint.Web.Spread.ComboBoxCellType cbMoney = new FarPoint.Web.Spread.ComboBoxCellType(strMoneyText, strMoneyValue);
  23.             //显示下拉框
  24.             cbMoney.ShowButton = true;
  25.             FpSpreadGV.ActiveSheetView.Columns[3].CellType = cbMoney;

  26.             this.FpSpreadGV.ActiveSheetView.PageSize = 50;

  27.             this.Response.Write(this.FpSpreadGV.ActiveSheetView.Cells[52,3].Text);
  28.         }
复制代码




3# 问题请问您是如何获取数据的?Spread 提供了 UpdateCommand 用于获取单元格中修改的数据。具体使用方法请参考:
http://blog.gcpowertools.com.cn/ ... et_usecommands.aspx

具体到您这里,需要通过前台按钮点击事件进行保存可以在前台通过以下代码调用 FpSpread1_UpdateCommand:

附件为 Demo(VS2013+SpreadV8.1+C#)
17603.zip (7.88 KB, 下载次数: 353)
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2015-7-17 17:47:00
7#
回复 4楼一萧一剑的帖子

为了给你提供更优质的服务,请对本次服务进行评分。我们会认真对待你提出的宝贵意见,谢谢   
回复 使用道具 举报
一萧一剑
中级会员   /  发表于:2015-11-6 13:44:00
8#
你理解的是正确的。
把你Demo里面33行的Text 改成Value 试试应该就报错了
  33行原句  this.Response.Write(this.FpSpreadGV.ActiveSheetView.Cells[52,3].Text);
    替换为 this.Response.Write(this.FpSpreadGV.ActiveSheetView.Cells[52,3].Value);
我要取的是Value 不是Text
技术改变世界
回复 使用道具 举报
Helen
高级会员   /  发表于:2015-11-6 15:22:00
9#
回复 8楼一萧一剑的帖子

按照您的描述修改之后,依然无法重现您的问题。

result.png
回复 使用道具 举报
一萧一剑
中级会员   /  发表于:2015-11-6 16:12:00
10#
行号19                     FpSpreadGV.DataSource = dt;
                                     FpSpreadGV.DataBind();
把行号22开始以下这段代码放到行号19号之前看看,因为我是IsPostBack的时候
  设置FpSpreadGV的绑定字段,样式,验证等。如果还是不能复现,下星期我弄个类似的Demo发你测试一下。
行号22  string[] strMoneyText;
              strMoneyText = new String[] { "RMB NO VAT", "USD", "EUR", "HKD" };
            string[] strMoneyValue;
            strMoneyValue = new String[] { "RMB", "USD", "EUR", "HKD" };
            FarPoint.Web.Spread.ComboBoxCellType cbMoney = new FarPoint.Web.Spread.ComboBoxCellType(strMoneyText, strMoneyValue);
            //显示下拉框
            cbMoney.ShowButton = true;
            FpSpreadGV.ActiveSheetView.Columns[3].CellType = cbMoney;
技术改变世界
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部