找回密码
 立即注册

QQ登录

只需一步,快速开始

xiaoaj

注册会员

10

主题

43

帖子

193

积分

注册会员

积分
193
xiaoaj
注册会员   /  发表于:2021-5-28 14:03  /   查看:4999  /  回复:11
1金币
本帖最后由 xiaoaj 于 2021-6-4 21:55 编辑

动态更改列的控件类型如何实现?类似以下语句
.Item("セット品区分").Editor = New GrapeCity.Win.ElTabelle.Editors.ButtonEditor("代替有り")
.Item("セット品区分").Editor = New GrapeCity.Win.ElTabelle.Editors.TextEditor


旧版本4.0的KeyDown事件在文本框编辑状态下响应,
但是在10.0文本框进入编辑状态下不响应KeyDown事件,
想获取到当前编辑状态下的控件,添加绑定KeyDown事件,
如何实现?

11 个回复

倒序浏览
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-5-28 14:59:46
沙发
可以用MultiRow上的EditingControlShowing事件


  1.     this.gcMultiRow1.EditingControlShowing += new System.EventHandler<GrapeCity.Win.MultiRow.EditingControlShowingEventArgs>(this.gcMultiRow1_EditingControlShowing);

  2.    
  3.         private void gcMultiRow1_EditingControlShowing(object sender, GrapeCity.Win.MultiRow.EditingControlShowingEventArgs e)
  4.         {&#8203;&#8203;&#8203;&#8203;&#8203;&#8203;&#8203;
  5.             // remove old event handler
  6.             e.Control.KeyDown -= this.PrintKeyKode;
  7.             // add new event
  8.             e.Control.KeyDown += this.PrintKeyKode;
  9.         }&#8203;&#8203;&#8203;&#8203;&#8203;&#8203;&#8203;


  10.         private void PrintKeyKode(object sender,KeyEventArgs args)
  11.         {&#8203;&#8203;&#8203;&#8203;&#8203;&#8203;&#8203;
  12.             Debug.WriteLine(args.KeyCode);
  13.         }&#8203;&#8203;&#8203;&#8203;&#8203;&#8203;&#8203;



复制代码
回复 使用道具 举报
xiaoaj
注册会员   /  发表于:2021-5-28 15:22:17
板凳
Richard.Ma 发表于 2021-5-28 14:59
可以用MultiRow上的EditingControlShowing事件

动态更改列的控件类型如何实现?
回复 使用道具 举报
xiaoaj
注册会员   /  发表于:2021-5-28 15:35:48
地板
本帖最后由 xiaoaj 于 2021-5-28 15:37 编辑
Richard.Ma 发表于 2021-5-28 14:59
可以用MultiRow上的EditingControlShowing事件

按照您提示的方法可以实现,但是由于没有RemoveHandler掉,多次进入后方法会被掉好几次。哦,看到了,先remove再添加。可以了
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-5-28 16:17:27
5#
好的
回复 使用道具 举报
xiaoaj
注册会员   /  发表于:2021-5-28 16:24:47
6#

动态更改列的控件类型如何实现?
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-5-28 18:22:27
7#
改列类型很简单var template = this.gcMultiRow1.Template;template.Row.Cells.RemoveAt(0);
template.Row.Cells.Insert(0, new TextBoxCell());
this.gcMultiRow1.Template = template;
回复 使用道具 举报
xiaoaj
注册会员   /  发表于:2021-5-31 11:02:52
8#
Richard.Ma 发表于 2021-5-28 18:22
改列类型很简单var template = this.gcMultiRow1.Template;template.Row.Cells.RemoveAt(0);
template.Row ...

同一列不同行支持不同的列类型吗?根据您提示的代码,只能修改整个列的类型。目前的业务处理需要不同行不同列类型,比如第一行是文本第二行是按钮。
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-5-31 11:20:32
9#
你好,这个目前没有办法支持
回复 使用道具 举报
sxyweiren
中级会员   /  发表于:2021-6-7 10:30:39
10#
动态更改列的控件类型如何实现?类似以下语句
.Item("セット品区分").Editor = New GrapeCity.Win.ElTabelle.Editors.ButtonEditor("代替有り")
.Item("セット品区分").Editor = New GrapeCity.Win.ElTabelle.Editors.TextEditor

这种只能根据业务需求来更改代码实现。

比如你这种,应该就是某种情况下可以编辑,另外一种情况设置成固定值。把ReadOnly设置成True就好了。
如果后续有点击动作的话,需要设定背景色,设定鼠标点击动作。做出Button的效果就行。

因为旧的ElTable就是一个表格,可以动态设定某个单元格的类型。但是MR10是一种基于模板的控件。单元格类型是以列为单位设定的。

如果项目很复杂,需要实现相同的效果,可以尝试Spread。
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部