找回密码
 立即注册

QQ登录

只需一步,快速开始

05pretender

注册会员

1

主题

7

帖子

50

积分

注册会员

积分
50

活字格认证

最新发帖
05pretender
注册会员   /  发表于:2011-12-21 22:51  /   查看:11117  /  回复:8
如题,我只设置某一项为ComboBoxCellType类型,并且该单元格初始时有数据text和tag,但是当我设置了ComboBoxCellType类型之后总是出现异常,如下所示,这是怎么回事啊?
有关调用实时(JIT)调试而不是此对话框的详细信息,
请参见此消息的结尾。

************** 异常文本 **************
System.Exception: Exception handled in FpSpread.WndProc ---> System.ArgumentOutOfRangeException: InvalidArgument=“1”的值对于“SelectedIndex”无效。
参数名: SelectedIndex
   在 System.Windows.Forms.ListBox.set_SelectedIndex(Int32 value)
   在 FarPoint.Win.FpCombo.set_SelectedItem(Object value)
   在 FarPoint.Win.Spread.CellType.ComboBoxCellType.SetEditorValue(Object value)
   在 FarPoint.Win.Spread.SpreadView.StartCellEditing(EventArgs e, Boolean formula)
   在 FarPoint.Win.Spread.SpreadView.a(Int32 A_0, Int32 A_1, MouseEventArgs A_2)
   在 FarPoint.Win.Spread.SpreadView.g(MouseEventArgs A_0)
   在 FarPoint.Win.Spread.FpSpread.OnMouseDown(MouseEventArgs e)
   在 System.Windows.Forms.Control.WmMouseDown(Message& m, MouseButtons button, Int32 clicks)
   在 System.Windows.Forms.Control.WndProc(Message& m)
   在 FarPoint.Win.Spread.FpSpread.WndProc(Message& m)
   --- 内部异常堆栈跟踪的结尾 ---
   在 FarPoint.Win.Spread.FpSpread.WndProc(Message& m)
   在 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   在 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   在 System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

8 个回复

倒序浏览
iceman
社区贡献组   /  发表于:2011-12-22 10:37:00
沙发

回复 1# 05pretender 的帖子

05pretender 你好,不好意思,这里没有重现你的问题,能否发 代码片段 或者能重现问题的 Demo 到论坛调试?
回复 使用道具 举报
05pretender
注册会员   /  发表于:2011-12-23 09:19:00
板凳
楼主:
您好,下面是代码
private void fpSpread_juejinliang_LeaveCell(object sender, LeaveCellEventArgs e)
        {

            if (e.NewColumn == 2  && e.Row != e.NewRow) {
                fpSpread_juejinliang.ActiveSheet.Cells[e.NewRow, e.NewColumn].Locked = false;
                string temp = fpSpread_juejinliang.ActiveSheet.Cells[e.NewRow, e.NewColumn].Text;
                //fpSpread_juejinliang.ActiveSheet.Cells[e.NewRow, e.NewColumn].Text = "";
                FarPoint.Win.Spread.CellType.ComboBoxCellType cmb=new FarPoint.Win.Spread.CellType.ComboBoxCellType();
                cmb.ListControl = new ListBox();
                cmb.ListControl.BorderStyle =BorderStyle.Fixed3D;
                cmb.ListControl.BackColor = Color.Orange;
                cmb.Items =GetJueTypeNameStrArrary();
                cmb.ItemData = GetJueTypeIDStrArrary();
                fpSpread_juejinliang.ActiveSheet.Cells[e.NewRow, e.NewColumn].Editor = cmb;
            }
        }
我想实现的功能是当第二列被选中的时候能够出现选择框,这个选择框用于选择对应的数据并填充到单元格中,但是当单元格没有数据的时候时可以选择的,当有数据的时候总显示有异常,请楼主看看下面的图
无标题.jpg (23.89 KB, 下载次数: 875)
回复 使用道具 举报
05pretender
注册会员   /  发表于:2011-12-23 09:35:00
地板

回复 2# iceman 的帖子

还有,当单元格里有数据的时候,除了出现那个异常之外,无法设置组合框的初始值,例如单元格中有"采准工程"的值的时候,单击这个单元格的时候就会变白而且报异常,求解。谢谢版主
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2011-12-23 10:54:00
5#

回复 3# 05pretender 的帖子

05pretender 你好,
报异常的原因是这样的:
1.我们在创建 ComboBoxCellType 时,同时给 ComboBoxCellType 设置了 listcontrol 和 items。第一次赋值成功。
2.但是当我们再次进入该单元格时,又重新给单元格设置了空的 listcontrol ,而单元格当前有值,有 items,所以会根据 items 的下标去在新的 listbox 中找值,但新的 listbox 为空。所以引发异常。
  1. System.ArgumentOutOfRangeException: InvalidArgument=Value of '1' is not valid for 'SelectedIndex'.
  2. Parameter name: SelectedIndex at System.Windows.Forms.ListBox.set_SelectedIndex(Int32 value)
复制代码
解决方案如下:
直接给 listcontrol 赋值,代码如下:
  1. private void fpSpread_juejinliang_LeaveCell(object sender, LeaveCellEventArgs e)
  2.         {
  3.             if (e.NewColumn == 2  && e.Row != e.NewRow) {
  4.                 fpSpread_juejinliang.ActiveSheet.Cells[e.NewRow, e.NewColumn].Locked = false;
  5.                 string temp = fpSpread_juejinliang.ActiveSheet.Cells[e.NewRow, e.NewColumn].Text;
  6.                 //fpSpread_juejinliang.ActiveSheet.Cells[e.NewRow, e.NewColumn].Text = "";
  7.                 FarPoint.Win.Spread.CellType.ComboBoxCellType cmb=new FarPoint.Win.Spread.CellType.ComboBoxCellType();
  8.                 cmb.ListControl = new ListBox();
  9.                 cmb.ListControl.BorderStyle =BorderStyle.Fixed3D;
  10.                 cmb.ListControl.BackColor = Color.Orange;
  11.                  cmb.ListControl.Items.AddRange(GetJueTypeNameStrArrary());
  12.                 cmb.ItemData = GetJueTypeIDStrArrary();
  13.                 fpSpread_juejinliang.ActiveSheet.Cells[e.NewRow, e.NewColumn].CellType= cmb;
  14.             }
  15.         }
复制代码
3.我已经把您的帖子转移到 Spread for WinForm 版块。请到相应版块发布主题。明确版本信息后,我们可以更快的处理问题,感谢您的配合。
回复 使用道具 举报
05pretender
注册会员   /  发表于:2011-12-23 11:15:00
6#

回复 5# iceman 的帖子

版主,您好:
感谢您的回复,我再试一下看看
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2011-12-23 11:54:00
7#

回复 6# 05pretender 的帖子

好的,不客气~
回复 使用道具 举报
05pretender
注册会员   /  发表于:2011-12-23 15:56:00
8#

回复 7# iceman 的帖子

版主神人啊,用您给的方法果然好了,赞一个
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2011-12-23 15:59:00
9#

回复 8# 05pretender 的帖子

楼主过奖了~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部