日期:2014-05-20  浏览次数:20735 次

怎么在一个form里刷新另一个form里的datagrid?
假设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的刷新   请问应该怎么做?

------解决方案--------------------
假设datagird在form1,只要把form1的实例传到form2中,就可以在form2中使用form1中的public函数和变量了,你可以用属性来把form1的实例传入form2中
例如:
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()函数了。
------解决方案--------------------
如果datagrid在form1里的话。就把刷新函数放到form1里面,代码如下:

public static bool IsExist = false;//标识form1是否已经存在或实例化 - 默认为不存在...

//form1加载时改变标记
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是否存在来实现功能就可以了。。。
实现步骤虽然比较复杂。但是效率更高...
此种方式,强烈推荐...