CanYou1 发表于 2015-10-15 16:42:00

为什么BeginNewRow()方法执行后再执行ScrollToTop()方法让其回到顶端会没有效查?

为什么C1DataGrid.BeginNewRow()方法执行后再执行ScrollViewer.ScrollToTop()方法让其回到顶端会没有效果?

Demo如下:



代码:



附:我验证过,之所以ScrollToTop()没有效果是受了BeginNewRow()影响的,但我因为业务需求又不能撤掉BeginNewRow()语句,所以烦请看看怎么办?

Alice 发表于 2015-10-15 17:59:00

回复 1楼CanYou1的帖子

谢谢对该问题的反馈。
从你的描述来看,BeginNewRow会添加一个新行,焦点会在新行上,等待你的数据,该行如果是在最后,因此不能跳到最上面。
为了帮助你解决问题,我还有一些地方需求请教。
你的需求是要开始一个新行,还不输入,就立即要跳到最顶端的位置么?BeginNewRow本身的设计就是添加新行,为了添加新数据,我不太理解你这里的作用又是什么呢?

CanYou1 发表于 2015-10-16 09:50:00

回复 2楼Alice的帖子

需求是这样,我们的客户要求页面打开时,C1DataGrid为空时要把第一行显示出来,让用户可以直接在列里填内容,而不要非得等用户双击“点击此处新增一行”才出现第一行数据。我的方案就是在页面刚打开时,如果列表为空,则执行BeginNewRow()语句,使其第一行显示出来,达到我们客户的目的。

Alice 发表于 2015-10-16 13:48:00

回复 3楼CanYou1的帖子

你可以让其离开编辑状态,就可以跳转到顶端。
但这种方式,都需要提交一行。比如调用完BeginNewRow后,调用EndEditRow或是EndNewRow方法,让其离开编辑状态。
比如:
datagrid.BeginNewRow();
            datagrid.EndEditRow(true);
            //datagrid.EndNewRow(true);

CanYou1 发表于 2015-10-16 14:11:00

回复 4楼Alice的帖子

这是不可以的!应该同用户自己来决定是否要提交这个新行,而不行程序自动提交,不然不就乱了吗?

Alice 发表于 2015-10-16 14:41:00

回复 5楼CanYou1的帖子

如果按照这样的逻辑,调用BeginNewRow方法后,若是想要离开编辑状态,只能选择提交一行或是取消该行后,才能进行其他的操作。
因此针对你的业务逻辑,很抱歉和我们的产品设计是冲突的。

CanYou1 发表于 2015-10-16 15:24:00

回复 2楼Alice的帖子

需求是这样,我们的客户要求页面打开时,空列表要把第一行显示出来,让用户可以直接在列里填内容,而不要非得等用户双击“点击此处新
CanYou1 发表于 2015-10-16 9:50:00 http://gcdn.gcpowertools.com.cn/images/common/back.gif

那你有没有别的办法实现我们的客户这样的需求?

Alice 发表于 2015-10-16 17:54:00

回复 7楼CanYou1的帖子

很抱歉,BeginNewRow的方法的功能是会使得当前单元格展示在可视区域。
在这种情况下无法跳转。

CanYou1 发表于 2015-10-18 09:23:00

回复 8楼Alice的帖子

Alice,我在7楼问的问题是你有没有别的办法实现我3楼所述的需求,并不是一定要求用BeginNewRow()方法(这只是我自己想的方案),你们作为C1DataGrid的提供商,有没有办法实现C1DataGrid为空时,将第一行显示出来?

Alice 发表于 2015-10-19 09:25:00

回复 9楼CanYou1的帖子

很抱歉给你带来的不便,我们对你的问题又进行了调查和研究。
目前我们觉得能提供的方案就是:可以在代码中间添加LastC1DataGrid.UpdateLayout();方法。
作为厂商,我们尽最大的努力为你提供控件提高效率,然而没有万能的控件,还望理解。
页: [1] 2
查看完整版本: 为什么BeginNewRow()方法执行后再执行ScrollToTop()方法让其回到顶端会没有效查?