找回密码
 立即注册

QQ登录

只需一步,快速开始

一萧一剑

中级会员

30

主题

70

帖子

650

积分

中级会员

积分
650

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

一萧一剑
中级会员   /  发表于:2015-7-2 10:52  /   查看:10111  /  回复: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-11-10 13:52:00
17#
回复 16楼iceman的帖子

好的,那本问题关闭了。
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2015-11-9 17:52:00
16#
回复 15楼一萧一剑的帖子

通过以下代码获取的都是null值:

  1.         protected void Page_Load(object sender, EventArgs e)
  2.         {
  3.             if (IsPostBack)
  4.             {
  5.                 return;
  6.             }

  7.             DataTable dt = new DataTable();
  8.             dt.Columns.Add("Column1");
  9.             dt.Columns.Add("Column2");
  10.             dt.Columns.Add("Column3",typeof(System.Int32));
  11.             for (int i = 0; i < 60; i++)
  12.             {
  13.                 dt.Rows.Add(i.ToString(), i.ToString(), null);
  14.             }

  15.             this.FpSpreadGV.DataSource = dt;
  16.             this.FpSpreadGV.ActiveSheetView.PageSize = 50;
  17.         }

  18.         protected void FpSpreadGV_UpdateCommand(object sender, FarPoint.Web.Spread.SpreadCommandEventArgs e)
  19.         {

  20.         }

  21.         protected void Button1_Click(object sender, EventArgs e)
  22.         {
  23.             this.Response.Write(this.FpSpreadGV.ActiveSheetView.Cells[52, 2].Value);
  24.             this.Response.Write(this.FpSpreadGV.ActiveSheetView.Cells[2, 2].Value);
  25.         }
复制代码


我想沟通中有些问题还没有提到,明天我会电话和您联系。

评分

参与人数 1满意度 +5 收起 理由
一萧一剑 + 5 谢谢,通过其他方式实现了。

查看全部评分

回复 使用道具 举报
一萧一剑
中级会员   /  发表于:2015-11-9 08:56:00
15#
问题是把第四列都赋值为null,然后数据绑定,获取对应单元格的Value,在当前页的值不是null,
你测试一下,如分页设置50,然后后台获取第4列值,前50条不是null,50以后的才是null,这是什么原因?因为绑定的时候datatable的值是所有值,为什么当前页50条会不是null,50以后是null?
技术改变世界
回复 使用道具 举报
Helen
高级会员   /  发表于:2015-11-6 17:27:00
14#
回复 13楼一萧一剑的帖子

您这个代码将DataTable第四列值都赋值为null了,然后进行数据绑定,获取对应单元格的Value,当然应该是null.........
烦请发一个可以正确重现的Demo给我们,谢谢!
回复 使用道具 举报
一萧一剑
中级会员   /  发表于:2015-11-6 16:54:00
13#
我已经把"RMB"改为null 了你试一下看看
for (int i = 0; i < 60; i++)
            {
                dt.Rows.Add(i.ToString(),i.ToString(),i.ToString(),null,i.ToString(),i.ToString(),i.ToString(),i.ToString(),i.ToString(),i.ToString(),i.ToString(),i.ToString(),i.ToString());
            }
技术改变世界
回复 使用道具 举报
一萧一剑
中级会员   /  发表于:2015-11-6 16:48:00
12#
还有一个和你说明一下,我后台查询数据的时候Columns[3]的值都是Null,
而你是直接赋值的 ,可能的问题点在这里。因为用户进人这个界面,可能只导入了其中1,2行数据(币种也就只有2行的数据,其他为Null),
然后再点击保存,如果分页设50条记录,那么50条以后的数据会报错。50条记录可以获取界面上下拉框的默认值,50条以后的都是Null
for (int i = 0; i < 60; i++)
            {
                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());
            }
技术改变世界
回复 使用道具 举报
Helen
高级会员   /  发表于:2015-11-6 16:22:00
11#
回复 10楼一萧一剑的帖子

依然无法重现,现在代码如下,烦请发一个可以重现的Demo给我们,谢谢!
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;


            FpSpreadGV.DataSource = dt;
            FpSpreadGV.DataBind();
            this.FpSpreadGV.ActiveSheetView.PageSize = 50;

            this.Response.Write(this.FpSpreadGV.ActiveSheetView.Cells[52,3].Value);
回复 使用道具 举报
一萧一剑
中级会员   /  发表于: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;
技术改变世界
回复 使用道具 举报
Helen
高级会员   /  发表于:2015-11-6 15:22:00
9#
回复 8楼一萧一剑的帖子

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

result.png
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部