假设datagrid在form1里,form里有如下的刷新函数
public void Refreshgrid()
{
ds.Clear();
myadapter.Fill(ds,"manager");
grid.DataSource = ds;
grid.DataMember = "manager";
grid.Refresh();
}
其中ds为dataset ,manager为数据库表名,grid为datagrid对象,在form1里面调用该函数可以实现datagrid的刷新
但是在窗口form2里面的一个按钮事件里面 有如下代码:
manager.Form5.mainform.Refreshgrid(); this.Dispose();
manager.Form5.mainform.gform.Dispose();
其中mainform为from1的一个对象 后两句代码为关闭两个打开的窗口
这样没有办法实现datagrid的刷新 请问应该怎么做?
public void Refreshgrid()
{
ds.Clear();
myadapter.Fill(ds,"manager");
grid.DataSource = ds;
grid.DataMember = "manager";
grid.Refresh();
}
其中ds为dataset ,manager为数据库表名,grid为datagrid对象,在form1里面调用该函数可以实现datagrid的刷新
但是在窗口form2里面的一个按钮事件里面 有如下代码:
manager.Form5.mainform.Refreshgrid(); this.Dispose();
manager.Form5.mainform.gform.Dispose();
其中mainform为from1的一个对象 后两句代码为关闭两个打开的窗口
这样没有办法实现datagrid的刷新 请问应该怎么做?
例如:
form2窗体:
private Form1 form1;
public Form1 Form1
{
get { return form1 ; }
set { form1 = value ;}
}form1中的button按键如下:
form2 temp = new form2();
temp.Form1 = this;
temp.Show();
这样你就可以在form2中直接调用form1.Refreshgrid()函数了。
不过 我的子窗口是二级子窗口 也就是主窗口打开一个子窗口后由子窗口打开的“孙子窗口” 怎么弄?如果我用中间的子窗口中的一个作为中间过度的话, 出现如下错误:
未处理的“System.NullReferenceException”类型的异常出现在 manager.exe 中。
其他信息: 未将对象引用设置到对象的实例。请问应该怎么弄?谢谢了
在二级子窗口中也设置一个 public Form1 form1; 在一级子窗口中 grandsun.form1 = form1;这样写对吗?
一般来讲,如果两个窗体没有什么关系的话,是不建议用属性来相互传值的,应该用delegate来做,如果用的话,在用之前要先判断,如:
if ( form1 != null || !form1.IsDisposed )
form1.Refreshgrid();如果form2是依附于form1的子窗体的话,最好用owner属性。如
form2 temp = new form2();
temp.owner = this;
temp.Form1 = this;
temp.Show();
这样form2就一直在form1的前面,如果form1被关闭了,那么form2也就被关闭了。
就是在一级子窗口中设一个 public Form1 form1; 在父窗口中 sub.form1 = this;
在二级子窗口中也设置一个 public Form1 form1; 在一级子窗口中 grandsun.form1 = form1;没错,这样也可以,但是form1还是不能被关闭,否则还会出现NULL的异常
在每一个子窗口的构造函数里面是不是要加上form1 = new Form1();?对不起 刚上手c# 请指点
private void form1_Load(object sender, System.EventArgs e)
{
IsExist = true;
}////form1关闭后还原标记
private void form1_Closed(object sender, System.EventArgs e)
{
IsExist = false;
}
//静态的...注意把DataSet和DataGrid也定义成静态的...
public static void Refreshgrid()
{
//如果form1已经实例化或在内存中存在时,运行以下操作...
if(IsExist)
{
ds.Clear();
myadapter.Fill(ds,"manager");
grid.DataSource = ds;
grid.DataMember = "manager";
grid.Refresh();
}
}实现在form里面刷新form1的datagrid。只要在form的Button事件里加如下代码就可以了:form1.Refreshgrid();
另外一种方法。就更好了
用委托事件就可以
在委托的方法里面用this.IsDisposed来判断form1是否存在来实现功能就可以了
实现步骤虽然比较复杂。但是效率更高...
此种方式,强烈推荐...