首页 新闻 会员 周边

.NET Winform 自定义分页控件如何在父窗体中调用?

0
悬赏园豆:50 [待解决问题]

我现在遇到一个问题,我自己写了一个分页用户控件testControl(有首页,上一页,下一页,跳转(多少页)按钮 gotoBtn),这个用户控件里面有一个获取数据源的方法GetData(),

父窗体有两个控件:1是数据显示控件dataGridView1,2是我刚刚定义的用户控件testControl;

父窗体在加载的时候可以 用 

DataTable dt = testControl.GetData(); 

dataGridView1.DataSource = dt;

这样就可以绑定第一次的数据了,可是问题是当我在父窗体点击跳转的时候如何获取testControl里面的GetData()方法呢?好像要用到委托和事件,我之前没搞过,有点弄不出来,哪位大神帮忙解决下,非常感谢!

 

夏空的主页 夏空 | 初学一级 | 园豆:152
提问于:2015-07-10 14:45
< >
分享
所有回答(3)
0

哈哈,还真是事件和委托。。。简单做法就是你在控件上定义Func,在主窗体赋值。

幻天芒 | 园豆:37175 (高人七级) | 2015-07-10 14:54

大哥,能详细点么?我这里的问题迫切需要解决

支持(0) 反对(0) 夏空 | 园豆:152 (初学一级) | 2015-07-10 14:57

@夏空: 我觉得分页控件肯定已经暴露了事件给你了,你只需要注册就行了吧。

支持(0) 反对(0) 幻天芒 | 园豆:37175 (高人七级) | 2015-07-10 16:30
0

看你的问题描述,应该是在testcontrol上点跳转或者上下页时候,通知父窗体调用testcontrol的getdata获取新的数据,然后辅助datagridview的datasource吧

 

你可以在testcontrol中声明一个自定事件UpdateDataEvent,在每次操作(跳转,上下页时候触发该事件),该事件处理在父窗体处理。基本就可以实现你的需求了。

ps:委托,事件声明应该会吧,忘记了话,就网上百度下,资料挺多的,看看基本就会了,当然你这还有中方法就是通过设计模式方式,通过定义个抽象接口,然后关联testcontrol和父窗体

visonme | 园豆:1674 (小虾三级) | 2015-07-10 15:10

大神,就是看不懂委托事件所以才发帖,不然真不用这么麻烦的,能给点详细的代码吗,谢了

支持(0) 反对(0) 夏空 | 园豆:152 (初学一级) | 2015-07-10 15:22
0

委托你得看懂啊

一、分页控件

public delegate Datatable LoadPagedData(int Page);

public LoadPagedData myLoadData =null;

 

下面Button_click

if myLoadData != null 

{myLoadData.Invoke(Page);}

 

二、父窗口Form

testControl.myLoadData =   此处把实际加载数据的函数句柄给控件

 

下面定义真实函数

Datatable LoadData(int Page)

{

  return dbhelper.getDatasoucebyProc(其他参数你自己写,page)

}

 

就这样。

错了别找我,委托还是得看懂。

像你现在这个情况,也可以不用委托,暴露ButtonClick事件给窗体也行。

就简单多了,只要在父窗体写

UserControl.NextPageClickhandler += NextPageLoadData;

就行了,

当然,事件事件上也是委托,只是你就不需要自己再定义一个委托而已,

控件点击委托微软已经帮你定义好了。

 

 

爱编程的大叔 | 园豆:30839 (高人七级) | 2015-07-10 15:35

UserControl.NextPageClickhandler += NextPageLoadData;这一句看不懂,具体写在哪里?

支持(0) 反对(0) 夏空 | 园豆:152 (初学一级) | 2015-07-10 15:43

@夏空: 父窗体

实际上应该是每个点击都要写

UserControl 这个是翻页控件的实例

NextPageClickHandler这是瞎写的,你得写回正确的,不知道咋写,你就看看userControl.Desinger里面怎么定义事件函数的。

 

NextPageLoadData 这个写在父窗体。

你可以先在UserControl中产生buttonClick事件,再把事件代码复制到父窗体。

void NextPageLoadData(object sender, eventArgs e)

{

     这时候代码运行在父窗体,可以访问到Gridview的。

    你只要知道Page是什么就可以了。

}

支持(0) 反对(0) 爱编程的大叔 | 园豆:30839 (高人七级) | 2015-07-10 15:44
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册