[Q&A] C1DataGrid 奇葩的 BeginNewRow() 方法
一、前言
用户千千万,自然需求就千奇百怪都有,某天有人提了这样一个需求:
某个 C1DataGrid 在 ScrollViewer 的底部(使纵向滚动条显示出来),然后当该 C1DataGrid 增加新行时(即手动调用 BeginNewRow() 方法),首先不能离开编辑状态,并且还要让滚动条自动滑动到顶部;
本来这种需求很简单, C1DataGrid 的 BeginNewRow() 方法,再调用 ScrollViewer.ScrollToTop(); 就可以了;可怪异的问题就出现在这两句了, ScrollViewer.ScrollToTop(); 该语句无效,滚动条无法自动滑动到顶部……
但是,
你增加一个按钮,在按钮的点击事件里处理 ScrollViewer.ScrollToTop(); ,它就有效果,点击按钮后可以回滚到顶部,而且 C1DataGrid 仍处于编辑状态(虽然没有编辑光标)……
然后,
开始各种尝试,各种抓狂,各种砸键盘拍鼠标……
最后,
二、解决方案
参考代码如下:
C1DataGrid.BeginNewRow();
C1DataGrid.UpdateLayout();
ScrollViewer.ScrollToTop();
第二行代码是关键,原因不明……理由没有……
瞥了一眼 BeginNewRow 方法的注释说明,如下:
也就是说 C1DataGrid 的BeginNewRow() 方法,不止会新增一行,而且还会自动滚动以显示当前编辑行;
猜测是当进入单元格编辑状态时,占用了焦点,导致滚动条失效;
于是我将第一行代码换成 C1DataGrid.EndEdit(false, true); 发现此时效果与 前言 中说的按钮点击效果一致(没有输入光标);所以就猜测当 C1DataGrid 的单元格进入编辑状态时,占用了某种句柄,导致外侧的滚动条失效,所以尝试使用 UpdateLayout 方法进行布局更新,看能不能释放掉那个句柄,结果,就对了……别问我为什么!!
[Q&A] C1DataGrid 奇葩的 BeginNewRow() 方法的更多相关文章
- 6月22日 Django中ORM的F查询和Q查询、事务、QuerySet方法大全
一.F查询和Q查询 F查询 在上面所有的例子中,我们构造的过滤器都只是将字段值与某个常量做比较.如果我们要对两个字段的值做比较,那该怎么做呢? Django 提供 F() 来做这样的比较.F() 的实 ...
- [Q&A] 类Range的PasteSpecial方法无效
环境说明: VS2013(C#) + Office2013 Bug说明: range1.Copy(Type.Missing); range2.PasteSpecial(Excel.XlPasteTyp ...
- angularjs 1.x $q模块使用
什么是$q $q是angularjs1.x中内置服务,在需要使用时可以注入它. angular.module('app').controller('myController', function my ...
- IntelliJ IDEA中怎么查看方法说明?
View→Quick Documentation 查看当前配置的快捷键(例如Ctrl + Q) 在光标所在的方法上按下快捷键就可以看到方法的说明 下图为在View菜单中查看当前配置的快捷键截图: 下图 ...
- python的特殊方法:
__str__和__repr__ 如果要把一个类的实例变成 str,就需要实现特殊方法__str__(): class Person(object): def __init__(self, name, ...
- ScriptManager的使用方法
脚本管理控件(ScriptManger)是ASP.NET AJAX中很重要的控件,通过使用ScriptManger可以进行整个页面的局部更新的管理.ScriptManger用来处理页面上局部更新,同一 ...
- 打开 chm 帮助文件显示空白及解决方法
有个很奇葩的解决方法:把 chm 文件用压缩软件压缩,然后用压缩软打开此压缩包,直接双击压缩包里面的 chm 文件 这虽然解决了问题,但是这不科学…… 分析:直接打开压缩包里面的文件,压缩包的文件是临 ...
- 强化学习读书笔记 - 05 - 蒙特卡洛方法(Monte Carlo Methods)
强化学习读书笔记 - 05 - 蒙特卡洛方法(Monte Carlo Methods) 学习笔记: Reinforcement Learning: An Introduction, Richard S ...
- STL中队列(queue)的使用方法
STL 中队列的使用(queue) 基本操作: push(x) 将x压入队列的末端 pop() 弹出队列的第一个元素(队顶元素),注意此函数并不返回任何值 front() 返回第一个元素(队顶元素) ...
随机推荐
- 关于python的bottle框架跨域请求报错问题的处理
在用python的bottle框架开发时,前端使用ajax跨域访问时,js代码老是进入不了success,而是进入了error,而返回的状态却是200.url直接在浏览器访问也是正常的,浏览器按F12 ...
- 尝试asp.net mvc 基于controller action 方式权限控制方案可行性
微软在推出mvc框架不久,短短几年里,版本更新之快,真是大快人心,微软在这种优秀的框架上做了大量的精力投入,是值得赞同的,毕竟程序员驾驭在这种框架上,能够强力的精化代码,代码层次也更加优雅,扩展较为方 ...
- MongoDB系列(一):简介及安装
什么是MongoDB MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统. 在高负载的情况下,添加更多的节点,可以保证服务器性能. MongoDB 旨在为应用提供可扩展的高 ...
- ASP.NET Core 中文文档 第四章 MVC(4.3)过滤器
原文:Filters 作者:Steve Smith 翻译:刘怡(AlexLEWIS) 校对:何镇汐 ASP.NET MVC 过滤器 可在执行管道的前后特定阶段执行代码.过滤器可以配置为全局有效.仅对控 ...
- ubuntu 下安装scrapy
1.把Scrapy签名的GPG密钥添加到APT的钥匙环中: sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 6272 ...
- 高性能 TCP/UDP/HTTP 通信框架 HP-Socket v4.1.1
HP-Socket 是一套通用的高性能 TCP/UDP/HTTP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP/HTTP 通信系统,提供 C/ ...
- ABAP实现屏幕自己刷新和跳转功能
ABAP开发工程中,有时候需要让跳转出的屏幕自动实现跳转和刷新的功能,该功能的实现需要在屏幕PBO 里面调用相应的事件执行. 关键代码为: SET TITLEBAR ' 屏幕自动程序'. IF g_c ...
- Hibernate 系列 学习笔记 目录 (持续更新...)
前言: 最近也在学习Hibernate,遇到的问题差不多都解决了,顺便把学习过程遇到的问题和查找的资料文档都整理了一下分享出来,也算是能帮助更多的朋友们了. 最开始使用的是经典的MyEclipse,后 ...
- Impress.js上手 - 抛开PPT、制作Web 3D幻灯片放映
前言: 如果你已经厌倦了使用PPT设置路径.设置时间.设置动画方式来制作动画特效.那么Impress.js将是你一个非常好的选择. 用它制作的PPT将更加直观.效果也是嗷嗷美观的. 当然,如果用它来装 ...
- TCP三次握手图解