在Stockedit窗体中,修改了数据,点击保存按钮,想实现 StockSelect窗体中DataGridview控件中数据的更新,
我在StockSelect添加了如下方法: public void Refsdata() { DataTable dt = new DataTable(); dt = stoBll.GetStockSelectData(); //绑定数据 this.dgvContent.DataSource = dt; this.dgvContent.Refresh(); } 但是我怎么调用呢? 我尝试了这样写,但是不对啊: |
|
10分 |
Stockedit中定义一个委托属性属性,在打开Stockedit窗口时,将刷新数据的方法赋值给该委托。
然后保存完过后,调用该委托就是了。 |
10分 |
1、StockSelect类的构造函数是否公有可访问的
2、每次重新创建一个StockSelect对象是否符合自身的需求 3、可参考窗体之间传值或通信的做法,网上很多。比如,在Stockedit中保存一个StockSelect对象;使用委托等等 |
StockEdit窗体中点击“保存”按钮,程序会将数据保存到数据库中,
StockSelect窗体的后台代码,会在StockSelect窗体打开的时候重新查询数据库,将数据加载到该窗体的DataGridview控件中。那么,现在问题来了: 如果StockSelect窗体未打开的情况下,StockEdit窗体保存完数据后,再去打开StockSelect窗体时,新修改的数据会自动加载到Datagridview控件中; 但是,若StockSelect窗体当前已经打开的同时,在Edit窗体修够数据后,点保存按钮 ,Select窗体的数据也不会自动刷新啊? 我该怎么做呢?应该怎么使用委托方法呢? fieldset>
|
|
10分 |
用事件,先打开Form2
Form1: pre class=”brush: csharp”> public delegate void AddRowEventHandler(object[] o); public event AddRowEventHandler AddRow; private void button1_Click(object sender, EventArgs e) { object[] o = new object[] { “a”, “10” }; this.dataGridView1.Rows.Add(o); if (this.AddRow != null) { this.AddRow(o); } } private void button2_Click(object sender, EventArgs e) { Form2 f2 = new Form2(); this.AddRow += f2.AddRow; f2.Show(); } /pre> Form2: pre class=”brush: csharp”> public void AddRow(object[] o) { this.dataGridView1.Rows.Add(o); } /pre> |
10分 |
http://bbs.csdn.net/topics/390128592
|
解决了,代码如下:
Edit窗体中: //刷新委托 public delegate void RefreshData(); public partial class StockAdjustEdit // { /// <summary> /// 刷新事件 /// </summary> public static event RefreshData RefData = null; } 保存按钮中添加: if (RefData != null) { RefData(); } /pre> Select窗体中:在窗体为活动状态添加委托方法中填写 : private void StockSelect_Activated(object sender, EventArgs e) { //刷新数据 StockAdjustEdit.RefData += new RefreshData(DataRef); } 在窗体非活动状态中添加去除委托: private void StockSelect_Leave(object sender, EventArgs e) { //刷新数据 StockAdjustEdit.RefData -= new RefreshData(DataRef); } |