如何读取子窗体datagrid中显示出来并被选中的数据记录?

时间:2021-08-12 11:00:00
大家好!
小弟最近开发了个mdi程序,其中使用子窗体中的datagrid控件来显示对数据库进行搜索的结果数据。现在需要做的是,通过点击主窗体中的一个“添加”按钮,将在该子窗体的datagrid中选中的数据记录添加到另一个子窗体的数据表中去。
问题是:每次搜索都要new一个子窗体用来显示数据,而这个新创建的子窗体是属于局部变量,因此在主窗体的“添加”按钮的click事件中没办法访问子窗体中的数据,请问各位大侠,这个问题怎么解决阿?多谢了!问题解决后立即给分!

18 个解决方案

#1


在子窗体的建立过程中把数据在父窗体备份一份!

#2


可以手动将子窗体中的datagrid控件设置成public

#3


参考:
http://dotnet.aspx.cc/ShowDetail.aspx?id=B8C64B14-5A2C-462F-8097-2726D7D15C1D

#4


谢谢楼上两位!
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事件中生成的子窗体;
}

#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();

其他方法想同。

#18


还有其他高手吗?

#1


在子窗体的建立过程中把数据在父窗体备份一份!

#2


可以手动将子窗体中的datagrid控件设置成public

#3


参考:
http://dotnet.aspx.cc/ShowDetail.aspx?id=B8C64B14-5A2C-462F-8097-2726D7D15C1D

#4


谢谢楼上两位!
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事件中生成的子窗体;
}

#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();

其他方法想同。

#18


还有其他高手吗?