小弟最近开发了个mdi程序,其中使用子窗体中的datagrid控件来显示对数据库进行搜索的结果数据。现在需要做的是,通过点击主窗体中的一个“添加”按钮,将在该子窗体的datagrid中选中的数据记录添加到另一个子窗体的数据表中去。
问题是:每次搜索都要new一个子窗体用来显示数据,而这个新创建的子窗体是属于局部变量,因此在主窗体的“添加”按钮的click事件中没办法访问子窗体中的数据,请问各位大侠,这个问题怎么解决阿?多谢了!问题解决后立即给分!
18 个解决方案
#1
在子窗体的建立过程中把数据在父窗体备份一份!
#2
可以手动将子窗体中的datagrid控件设置成public
#3
参考:
http://dotnet.aspx.cc/ShowDetail.aspx?id=B8C64B14-5A2C-462F-8097-2726D7D15C1D
http://dotnet.aspx.cc/ShowDetail.aspx?id=B8C64B14-5A2C-462F-8097-2726D7D15C1D
#4
谢谢楼上两位!
to wnlovezxm:我也考虑过这个办法,但是我得程序中可能要多次多数据库进行搜索,如果每次都备份的话,有可能造成对系统资源的过度占用。我认为这不是一个最好的实践。
to 大象:现在的问题是每次搜索之后new的那个子窗体在其他代码部分就没办法访问,因为它是个局部变量(我是在一个“搜索”按钮的click事件中创建的子窗体),因此,只把datagrid设置成public好像不太管用吧?
还有没有其他高手啊?欢迎踊跃发表意见:)
to wnlovezxm:我也考虑过这个办法,但是我得程序中可能要多次多数据库进行搜索,如果每次都备份的话,有可能造成对系统资源的过度占用。我认为这不是一个最好的实践。
to 大象:现在的问题是每次搜索之后new的那个子窗体在其他代码部分就没办法访问,因为它是个局部变量(我是在一个“搜索”按钮的click事件中创建的子窗体),因此,只把datagrid设置成public好像不太管用吧?
还有没有其他高手啊?欢迎踊跃发表意见:)
#5
自己顶一下:(
#6
再顶!:(
#7
对此表示关注
#8
大象的方法是可以行得通的哈,你把你的一部分源代码,拿出来看看!我做的项目中的将新生成窗口的控件设置成PUBLIC就可以访问哈!
#9
其实如何你把子窗体做成单件模式的,这些类似问题不就解决了。
我现在做的这个项目就是如此解法的。
我现在做的这个项目就是如此解法的。
#10
多谢各位参与!
致楼上:何为单件模式?可否说的详细一点?
致楼上:何为单件模式?可否说的详细一点?
#11
to 小华:部分源代码如下,请指教:)
Mainform
private void button_search_click(...)
{
Form_child child=new Form_child();
....
}
private void button_others_click(...)
{
//在此处需要取出child中datagrid数据,但是没办法访问上面“搜索”控件的click事件中生成的子窗体;
}
Mainform
private void button_search_click(...)
{
Form_child child=new Form_child();
....
}
private void button_others_click(...)
{
//在此处需要取出child中datagrid数据,但是没办法访问上面“搜索”控件的click事件中生成的子窗体;
}
#12
把添加按钮放在子窗体不行啊!变态
#13
致楼上:这里只是讨论技术上可行不可行的问题,不欢迎不文明用语。
这也不是我提出的,领导要求这么做,我也没办法呀!
这也不是我提出的,领导要求这么做,我也没办法呀!
#14
有高手能够解决这个问题吗?高分相送!
#15
自己顶一下:(
#16
up
#17
C# 的窗体单件模式,参考例子:
private static TMyForm _instance = null;
protected TMyForm() //改变窗体的默认初始化为私有
{
//
// Windows 窗体设计器支持所必需的
//
InitializeComponent();
//
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
//
}
//该方法保证产生唯一的实例
public static TMyForm Instance()
{
if (_instance == null)
{
_instance = new TMyForm();
}
return _instance;
}
调用它时,如下:
TMyForm myForm1 = TMyForm.Instance();
其他方法想同。
private static TMyForm _instance = null;
protected TMyForm() //改变窗体的默认初始化为私有
{
//
// Windows 窗体设计器支持所必需的
//
InitializeComponent();
//
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
//
}
//该方法保证产生唯一的实例
public static TMyForm Instance()
{
if (_instance == null)
{
_instance = new TMyForm();
}
return _instance;
}
调用它时,如下:
TMyForm myForm1 = TMyForm.Instance();
其他方法想同。
#18
还有其他高手吗?
#1
在子窗体的建立过程中把数据在父窗体备份一份!
#2
可以手动将子窗体中的datagrid控件设置成public
#3
参考:
http://dotnet.aspx.cc/ShowDetail.aspx?id=B8C64B14-5A2C-462F-8097-2726D7D15C1D
http://dotnet.aspx.cc/ShowDetail.aspx?id=B8C64B14-5A2C-462F-8097-2726D7D15C1D
#4
谢谢楼上两位!
to wnlovezxm:我也考虑过这个办法,但是我得程序中可能要多次多数据库进行搜索,如果每次都备份的话,有可能造成对系统资源的过度占用。我认为这不是一个最好的实践。
to 大象:现在的问题是每次搜索之后new的那个子窗体在其他代码部分就没办法访问,因为它是个局部变量(我是在一个“搜索”按钮的click事件中创建的子窗体),因此,只把datagrid设置成public好像不太管用吧?
还有没有其他高手啊?欢迎踊跃发表意见:)
to wnlovezxm:我也考虑过这个办法,但是我得程序中可能要多次多数据库进行搜索,如果每次都备份的话,有可能造成对系统资源的过度占用。我认为这不是一个最好的实践。
to 大象:现在的问题是每次搜索之后new的那个子窗体在其他代码部分就没办法访问,因为它是个局部变量(我是在一个“搜索”按钮的click事件中创建的子窗体),因此,只把datagrid设置成public好像不太管用吧?
还有没有其他高手啊?欢迎踊跃发表意见:)
#5
自己顶一下:(
#6
再顶!:(
#7
对此表示关注
#8
大象的方法是可以行得通的哈,你把你的一部分源代码,拿出来看看!我做的项目中的将新生成窗口的控件设置成PUBLIC就可以访问哈!
#9
其实如何你把子窗体做成单件模式的,这些类似问题不就解决了。
我现在做的这个项目就是如此解法的。
我现在做的这个项目就是如此解法的。
#10
多谢各位参与!
致楼上:何为单件模式?可否说的详细一点?
致楼上:何为单件模式?可否说的详细一点?
#11
to 小华:部分源代码如下,请指教:)
Mainform
private void button_search_click(...)
{
Form_child child=new Form_child();
....
}
private void button_others_click(...)
{
//在此处需要取出child中datagrid数据,但是没办法访问上面“搜索”控件的click事件中生成的子窗体;
}
Mainform
private void button_search_click(...)
{
Form_child child=new Form_child();
....
}
private void button_others_click(...)
{
//在此处需要取出child中datagrid数据,但是没办法访问上面“搜索”控件的click事件中生成的子窗体;
}
#12
把添加按钮放在子窗体不行啊!变态
#13
致楼上:这里只是讨论技术上可行不可行的问题,不欢迎不文明用语。
这也不是我提出的,领导要求这么做,我也没办法呀!
这也不是我提出的,领导要求这么做,我也没办法呀!
#14
有高手能够解决这个问题吗?高分相送!
#15
自己顶一下:(
#16
up
#17
C# 的窗体单件模式,参考例子:
private static TMyForm _instance = null;
protected TMyForm() //改变窗体的默认初始化为私有
{
//
// Windows 窗体设计器支持所必需的
//
InitializeComponent();
//
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
//
}
//该方法保证产生唯一的实例
public static TMyForm Instance()
{
if (_instance == null)
{
_instance = new TMyForm();
}
return _instance;
}
调用它时,如下:
TMyForm myForm1 = TMyForm.Instance();
其他方法想同。
private static TMyForm _instance = null;
protected TMyForm() //改变窗体的默认初始化为私有
{
//
// Windows 窗体设计器支持所必需的
//
InitializeComponent();
//
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
//
}
//该方法保证产生唯一的实例
public static TMyForm Instance()
{
if (_instance == null)
{
_instance = new TMyForm();
}
return _instance;
}
调用它时,如下:
TMyForm myForm1 = TMyForm.Instance();
其他方法想同。
#18
还有其他高手吗?