dev的gridcontrol的赋值问题

sunhouju 2015-11-24 05:06:28
我自己写了一个usercontrol从DevExpress.XtraGrid.GridControl继承,然后可以将这个控件当作gridcontrol来用,放在form里面赋值什么的都没问题,基本上grid。datasource = datatable,然后grid的gridview的datasource就被赋值了,然而将这个控件加入到另一个控件中去用,不再是放在form里,结果赋值的时候出了问题,给grid.datasource = datatable,然后gridview的datasource居然是null;然后等到加载完成,点击grid里的数据再调试时,gridview的datasource的值就是datatable的值了。
怎么回事呢?
难道是因为用了两层自定义控件?
...全文
658 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunhouju 2015-12-22
  • 打赏
  • 举报
回复
该问题已解决
sunhouju 2015-12-02
  • 打赏
  • 举报
回复
引用 3 楼 wfy4422 的回复:
你是不是用了布局控件,并且有页签?数据源的赋值代码是在最外层控件Load事件里?如果是,是因dev布局控件有页签的那种,刚好你的控件又不是放在首先显示的那页,控件Load事件里的代码是不执行的。
我的代码大概是这样的: MyGridControl : GridControl——其中定义了gridview为MyGridControl 的mainview 然后窗体的空间级别是:form--layoutcontrol--tabcontrol--MyGridControl 然后代码是MyGridControl .datasource = datatable; 然后就出现了这个问题。里面没有load事件
sunhouju 2015-12-02
  • 打赏
  • 举报
回复
引用 3 楼 wfy4422 的回复:
你是不是用了布局控件,并且有页签?数据源的赋值代码是在最外层控件Load事件里?如果是,是因dev布局控件有页签的那种,刚好你的控件又不是放在首先显示的那页,控件Load事件里的代码是不执行的。
您说的很对,我应该怎么解决呢
wfy4422 2015-12-02
  • 打赏
  • 举报
回复
引用 6 楼 sunhouju 的回复:
[quote=引用 3 楼 wfy4422 的回复:] 你是不是用了布局控件,并且有页签?数据源的赋值代码是在最外层控件Load事件里?如果是,是因dev布局控件有页签的那种,刚好你的控件又不是放在首先显示的那页,控件Load事件里的代码是不执行的。
我的代码大概是这样的: MyGridControl : GridControl——其中定义了gridview为MyGridControl 的mainview 然后窗体的空间级别是:form--layoutcontrol--tabcontrol--MyGridControl 然后代码是MyGridControl .datasource = datatable; 然后就出现了这个问题。里面没有load事件[/quote] 现在我的做法有两种:1.是在窗体初始化的地方(Load事件处理函数或者构造函数)先切一下到有MyGridControl的页签,然后切回你要首先显示的页签。2.MyGridControl公开一个方法或者直接赋值数据值,但要在窗体初始化时调用。反正我觉得tabcontrol这些布局控件初始化时一般只初始化你能第一次看到的子控件,别的页签的子控件要你切过去才初始化的,所以只能强制在窗体做一些初始化的工作,不能由自定义控件自行初始化。暂时我只知这样搞,不确定有没什么属性设置可以方便解决这个问题的
江南小鱼 2015-11-27
  • 打赏
  • 举报
回复
应该是初始化时机不同造成的 你可以在UserControl给grid赋值的时候,给gridview赋下数据源
wfy4422 2015-11-26
  • 打赏
  • 举报
回复
你是不是用了布局控件,并且有页签?数据源的赋值代码是在最外层控件Load事件里?如果是,是因dev布局控件有页签的那种,刚好你的控件又不是放在首先显示的那页,控件Load事件里的代码是不执行的。
sunhouju 2015-11-26
  • 打赏
  • 举报
回复
引用 1 楼 duanzi_peng 的回复:
或许吧。 你可以使用Binding 模式 试试
我想我发现问题了,我用的vs2015+dev15.1.4,您能不能帮我做个测试 步骤如下: 1、新建一个winform应用程序 2、新建一个用户控件 3、在用户控件中拖入gridcontrol,并对gridcontrol初始化(gridcontrol1.datasource= datatable),然后定义dtatrow dr = gridview.getfocuseddatarow(); string s = dr[""].tostring(); 4、在form窗体内拖入一个tabcontrol,然后把刚才的用户控件添加到tabpage中,运行程序看看是否报错 多谢了
exception92 2015-11-25
  • 打赏
  • 举报
回复
或许吧。 你可以使用Binding 模式 试试

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧