找回密码
 立即注册

QQ登录

只需一步,快速开始

qiuzhilv007
中级会员   /  发表于:2015-12-17 15:54  /   查看:7428  /  回复:9
设定rowcount,未设定datasource的Multirow
当rowcount>0时点击一个(0,0)以外的单元格,然后把rowcount设为0清空Multirow
然后再设rowcount值为大于0的值,则CurrentCellPosition被记忆为上次点击的单元格。
为何清空了Multirow获得焦点的单元格还被记忆了?哪里记忆的
清空了再加上行不应该是(0,0)获得焦点吗。这个记忆多此一举,带来的麻烦是本该在设定其他焦点时触发cellenter事件,但被记忆了,设的焦点是被记忆的,触发不了cellenter了
如在清行之前设焦点为(0,0)则多触发了cellenter
如在清行之后设定cellposition.empty则设了也白设
如在加行后设定(0,0)则也是多触发了cellenter。

9 个回复

倒序浏览
Alice
社区贡献组   /  发表于:2015-12-17 17:23:00
沙发
回复 1楼qiuzhilv007的帖子

谢谢您的反馈。
如果要将RowCount设置为0,前提是AllowUserToAddRows属性设置为false。
在RowCount设置为0后,CurrentCellPosition会是Empty,CurrentCellPosition的Row和Column都是-1.
再重新设置RowCount后,无论之前的焦点在哪里,因为会重新绘制和选中单元格,所以总是会触发CellEnter事件。

因此我不能重现您说的触发不了CellEnter事件。所以请提供能必然重现该问题的步骤。

另外有关CurrentCellPosition属性的策略,如果因为删除或是修改行导致该CurrentCellPosition的位置不存在,就会跳到上一行的同一位置,如果为0的时候,就是Empty。重新设置行后,会进入第一行的上次点击的位置。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
qiuzhilv007
中级会员   /  发表于:2015-12-17 18:13:00
板凳
对不起,对于重新设置rowcount后,不触发cellenter事件是失误。不触发是自己控制的。
因sheet4.0中enter事件发生时cellenter是不触发的,所以控制住了。但sheet4.0中,当行被清了后,再设置行显示时焦点是不会被记忆的,是放在(0,0)上的。
这时在代码中再把焦点设置到其他单元格上,会触发设置焦点单元格的cellenter。但multirow记忆了。导致设置焦点相当于还是原来的位置。
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-12-18 11:43:00
地板
回复 3楼qiuzhilv007的帖子

不好意思,我没理解您想在MR8.0中实现什么样的功能?
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
qiuzhilv007
中级会员   /  发表于:2015-12-18 14:45:00
5#
想实现在rowcount设置为0时焦点自动清除记忆。再为rowcount设置大于0的值时,焦点自动到(0,0)坐标。
也就是清除行时别让Multirow还记着清行之前焦点在哪。
一般用户操作检索时,当检索出数据时焦点在左上角单元格。用户进行操作后焦点不一定在哪个单元格上。
当清除检索结果再检索出数据时还应该在左上角。可Multirow竟然记住上次的焦点。这不合常理。
我可以在清除数据前,或数据出来后手动将焦点放在(0,0)上,可这个操作导致单元格焦点变换而引发了cellenter事件。
想要的功能是如何在清除行时,把multirow记住焦点这个多余的东西清掉。
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-12-18 17:21:00
6#
回复 5楼qiuzhilv007的帖子

您好。
经过和研发组确认,触发CellEnter是设计,无法改变。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
qiuzhilv007
中级会员   /  发表于:2015-12-18 17:52:00
7#
回复 6楼Alice的帖子

额,主要问题是清行后为何焦点还记忆。并不是触发cellenter这个
回复 使用道具 举报
robert
金牌服务用户   /  发表于:2015-12-21 09:24:00
8#
我尝试设置行数为0再设置成大于0的行数,没有触发焦点记忆。
是否可以上传一个简单的工程来重现你说的现象呢?
谢谢
回复 使用道具 举报
qiuzhilv007
中级会员   /  发表于:2015-12-21 11:10:00
9#
  1. Imports GrapeCity.Win.MultiRow
  2. Public Class Form1
  3.     Private GcMultiRow1 As GcMultiRow
  4.     Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
  5.         Dim lbl As Label = New Label
  6.         lbl.Text = "Step1:Set Postion. Step2:ClearRow. Step3:AddRow"
  7.         lbl.Width = 300
  8.         Me.Controls.Add(lbl)
  9.         Dim btnStep1 As Button = New Button
  10.         btnStep1.Text = "Step1"
  11.         btnStep1.Location = New Point(0, lbl.Height)
  12.         AddHandler btnStep1.Click, AddressOf btnStep1_Click
  13.         Me.Controls.Add(btnStep1)
  14.         Dim btnStep2 As Button = New Button
  15.         btnStep2.Text = "Step2"
  16.         btnStep2.Location = New Point(btnStep1.Width, btnStep1.Location.Y)
  17.         AddHandler btnStep2.Click, AddressOf btnStep2_Click
  18.         Me.Controls.Add(btnStep2)
  19.         Dim btnStep3 As Button = New Button
  20.         btnStep3.Text = "Step3"
  21.         btnStep3.Location = New Point(btnStep1.Width + btnStep2.Width, btnStep1.Location.Y)
  22.         AddHandler btnStep3.Click, AddressOf btnStep3_Click
  23.         Me.Controls.Add(btnStep3)
  24.         GcMultiRow1 = New GcMultiRow
  25.         Me.GcMultiRow1.AllowUserToAddRows = False
  26.         Me.GcMultiRow1.AllowUserToDeleteRows = False
  27.         Me.GcMultiRow1.Location = New Point(0, lbl.Height + btnStep1.Height)
  28.         Dim tmpl As Template = New Template
  29.         Dim cell1 As InputMan.GcTextBoxCell = New InputMan.GcTextBoxCell
  30.         Dim cell2 As InputMan.GcTextBoxCell = New InputMan.GcTextBoxCell
  31.         cell2.Location = New Point(cell1.Width, 0)
  32.         tmpl.Row.Cells.Add(cell1)
  33.         tmpl.Row.Cells.Add(cell2)
  34.         tmpl.Row.Height = cell1.Height
  35.         tmpl.Width = cell1.Width * 2
  36.         GcMultiRow1.Template = tmpl
  37.         GcMultiRow1.RowCount = 3
  38.         Me.Controls.Add(GcMultiRow1)
  39.         GcMultiRow1.CurrentCell.Value = "InitCellPosition"
  40.     End Sub
  41.     Private Sub btnStep1_Click()
  42.         If GcMultiRow1.RowCount > 1 Then
  43.             GcMultiRow1.CurrentCellPosition = New CellPosition(1, 1)
  44.             GcMultiRow1.CurrentCell.Value = "Step1CellPosition"
  45.         End If
  46.     End Sub
  47.     Private Sub btnStep2_Click()
  48.         GcMultiRow1.RowCount = 0
  49.     End Sub
  50.     Private Sub btnStep3_Click()
  51.         GcMultiRow1.RowCount = 3
  52.         GcMultiRow1.CurrentCell.Value = "Step3CellPosition"
  53.     End Sub
  54.    
  55. End Class
复制代码
画面初始焦点在0,0
step1设置焦点为1,1
step2清行
step3再加行
加行后焦点记住了step2设置的列位置,不是初始时的0,0
回复 使用道具 举报
robert
金牌服务用户   /  发表于:2015-12-21 14:14:00
10#
非常抱歉,我确认了下。MultiRow8的策略确实是记录了删除行前选择的CellIndex。而且没有好的方案去规避这个策略。

评分

参与人数 1金币 +999 收起 理由
Alice + 999 奖励金币

查看全部评分

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