我现在遇到一个问题,我自己写了一个分页用户控件testControl(有首页,上一页,下一页,跳转(多少页)按钮 gotoBtn),这个用户控件里面有一个获取数据源的方法GetData(),
父窗体有两个控件:1是数据显示控件dataGridView1,2是我刚刚定义的用户控件testControl;
父窗体在加载的时候可以 用
DataTable dt = testControl.GetData();
dataGridView1.DataSource = dt;
这样就可以绑定第一次的数据了,可是问题是当我在父窗体点击跳转的时候如何获取testControl里面的GetData()方法呢?好像要用到委托和事件,我之前没搞过,有点弄不出来,哪位大神帮忙解决下,非常感谢!
哈哈,还真是事件和委托。。。简单做法就是你在控件上定义Func,在主窗体赋值。
大哥,能详细点么?我这里的问题迫切需要解决
@夏空: 我觉得分页控件肯定已经暴露了事件给你了,你只需要注册就行了吧。
看你的问题描述,应该是在testcontrol上点跳转或者上下页时候,通知父窗体调用testcontrol的getdata获取新的数据,然后辅助datagridview的datasource吧
你可以在testcontrol中声明一个自定事件UpdateDataEvent,在每次操作(跳转,上下页时候触发该事件),该事件处理在父窗体处理。基本就可以实现你的需求了。
ps:委托,事件声明应该会吧,忘记了话,就网上百度下,资料挺多的,看看基本就会了,当然你这还有中方法就是通过设计模式方式,通过定义个抽象接口,然后关联testcontrol和父窗体
大神,就是看不懂委托事件所以才发帖,不然真不用这么麻烦的,能给点详细的代码吗,谢了
委托你得看懂啊
一、分页控件
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;
就行了,
当然,事件事件上也是委托,只是你就不需要自己再定义一个委托而已,
控件点击委托微软已经帮你定义好了。
UserControl.NextPageClickhandler += NextPageLoadData;这一句看不懂,具体写在哪里?
@夏空: 父窗体
实际上应该是每个点击都要写
UserControl 这个是翻页控件的实例
NextPageClickHandler这是瞎写的,你得写回正确的,不知道咋写,你就看看userControl.Desinger里面怎么定义事件函数的。
NextPageLoadData 这个写在父窗体。
你可以先在UserControl中产生buttonClick事件,再把事件代码复制到父窗体。
void NextPageLoadData(object sender, eventArgs e)
{
这时候代码运行在父窗体,可以访问到Gridview的。
你只要知道Page是什么就可以了。
}