有一个主窗体MainForm,他有2个子窗体ChildForm,DialogForm。
一个数据类DataLib.
ChildForm上有datagridview1.和方法GetData()用于从DataLib加载数据到datagridview1.MainForm和DialogForm都有可能(非同时)更改DataLib内数据。要求更改后立即刷新ChildForm的datagridview1.请高手指教.
namespace SadelAsk
{
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
} private void button2_Click(object sender, EventArgs e)
{
DataLib.c1 = "加载值一";//数据更改了 cf.Close();
button1_Click(null, null);
} ChildForm cf = null;
private void button1_Click(object sender, EventArgs e)
{
if (cf == null || cf.IsDisposed) cf = new ChildForm();
cf.MdiParent = this;
cf.WindowState = FormWindowState.Normal;
cf.Show();
cf.Activate();
} private void button3_Click(object sender, EventArgs e)
{
DialogForm df = new DialogForm();
df.ShowDialog();
}
}
}namespace SadelAsk
{
public partial class ChildForm : Form
{
public ChildForm()
{
InitializeComponent(); GetData();
} private void GetDataBtn_Click(object sender, EventArgs e)
{
GetData();
} public void GetData()//怎么在外部调用此方法?
{
dataGridView1.RowCount = 3;
for (int i = 0; i < 3; i++)
{
dataGridView1[0, i].Value = (i + 1).ToString();
dataGridView1[1, i].Value = DataLib.c1;
}
}
}
}namespace SadelAsk
{
public partial class DialogForm : Form
{
public DialogForm()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
DataLib.c1 = "加载值二";//数据更改了 //怎么更新ChildFrom?
}
}
}namespace SadelAsk
{
class DataLib
{
public static string c1;
}
}
一个数据类DataLib.
ChildForm上有datagridview1.和方法GetData()用于从DataLib加载数据到datagridview1.MainForm和DialogForm都有可能(非同时)更改DataLib内数据。要求更改后立即刷新ChildForm的datagridview1.请高手指教.
namespace SadelAsk
{
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
} private void button2_Click(object sender, EventArgs e)
{
DataLib.c1 = "加载值一";//数据更改了 cf.Close();
button1_Click(null, null);
} ChildForm cf = null;
private void button1_Click(object sender, EventArgs e)
{
if (cf == null || cf.IsDisposed) cf = new ChildForm();
cf.MdiParent = this;
cf.WindowState = FormWindowState.Normal;
cf.Show();
cf.Activate();
} private void button3_Click(object sender, EventArgs e)
{
DialogForm df = new DialogForm();
df.ShowDialog();
}
}
}namespace SadelAsk
{
public partial class ChildForm : Form
{
public ChildForm()
{
InitializeComponent(); GetData();
} private void GetDataBtn_Click(object sender, EventArgs e)
{
GetData();
} public void GetData()//怎么在外部调用此方法?
{
dataGridView1.RowCount = 3;
for (int i = 0; i < 3; i++)
{
dataGridView1[0, i].Value = (i + 1).ToString();
dataGridView1[1, i].Value = DataLib.c1;
}
}
}
}namespace SadelAsk
{
public partial class DialogForm : Form
{
public DialogForm()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
DataLib.c1 = "加载值二";//数据更改了 //怎么更新ChildFrom?
}
}
}namespace SadelAsk
{
class DataLib
{
public static string c1;
}
}
解决方案 »
- Lock(this)与Lock(Typeof(class))区别
- 串口数据解析问题
- c# 如何操作Excel
- [急切求助]关于字符串处理的正则表达式!!!
- 如何限制一个类必须某些指定的静态方法?高分!长期!
- 求一个txt文件分割的写法
- 各位大侠,有谁对界面,不规则界面+可拆换皮肤比较有经验的请进
- 如何在水晶报表中让照片跟数据记录的变化而变化?
- 删除指定字符问题
- select count(id) from tablename where cm=1在存储过程中,要随着传入的变量改变tablename 和cm应该怎么写?
- 急,自定义datatable多行多列问题??
- winform Button TEXT文本内容换行问题???
对于大型数据dataview公有化会否增加系统负担降低程序性能?
dataview为私有的时候GetData()的public声明似乎被无视了?
ChildForm接到委托通知后,进行刷新。
DataLib代码 public delegate void UpdateNotification(int para);
public class DataLib
{
public event UpdateNotification theNotification; public void UpdateItem()
{
// update data
theNotification(2);//可以传参数告诉定购者什么东西改变了。
}
}
Form1 创建Form2并定购消息: DataLib lib = new DataLib(); private void button3_Click(object sender, EventArgs e)
{
lib.theNotification += new UpdateNotification(DataLibChanged); Form2 form2 = new Form2(); form2.lib = lib;
form2.Show();
} public void DataLibChanged(int para)
{
// Update UI;
MessageBox.Show("Update");
}
Form2 修改数据public DataLib lib = null; private void button1_Click(object sender, EventArgs e)
{
if (lib != null)
{
lib.UpdateItem();
}
}