我有两窗体,一个列表在下面,一个是添加在上面
我想点击添加窗体的确定键,后面类表里面就显示添加的内容 ,点击确定,后面刷新,下一条再点击,后面刷新,子窗体一直在上面操作,主窗体不断更新
主窗体:
public partial class UserInfoList : Form
{
private DataSet dataSet = new DataSet();
private SqlDataAdapter dataAdapter;
public UserInfoList()
{
InitializeComponent();
}
public void Bind1()
{
FillDgv("SELECT * FROM Info RIGHT OUTER JOIN Result ON Info.客户代码 = Result.KHDM");
dgvInfoList.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
}
public void UserInfoList_Load(object sender, EventArgs e)
{
Bind1();
}
public void FillDgv(string sqlstr)
{
string sql = sqlstr;
dataAdapter = new SqlDataAdapter(sql, DBHelper.connection);
dataAdapter.Fill(dataSet)
dgvInfoList.DataSource = dataSet.Tables[0];
DBHelper.connection.Close();
}
子窗体:
private void btnOK_Click(object sender, EventArgs e)
{
//调用验证输入方法
if (ValidateInput())
{
//打开数据库连接
DBHelper.connection.Open();
//编写插入sql语句
string sql = string.Format("INSERT INTO Result(KHDM ,[TIME] ,RESULT)VALUES ('{0}','{1}','{2}')", this.lblKHMC.Text.Trim(), DateTime.Parse(dtpTime.Text).ToString("yyyy/MM/dd"), cboResult.Text);
SqlCommand command = new SqlCommand(sql, DBHelper.connection);
int result = (int)command.ExecuteNonQuery();
if (result > 0)
{
MessageBox.Show("添加成功!", "操作提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
num++;
this.txtUser.Text = list[num];
this.lblKHMC.Text = listId[num];
UserInfoList a = new UserInfoList();
a.Bind1();/////////////////////////点击确定,显示后面窗体的刷新内容??????????
DBHelper.connection.Close();
}
}
我想点击添加窗体的确定键,后面类表里面就显示添加的内容 ,点击确定,后面刷新,下一条再点击,后面刷新,子窗体一直在上面操作,主窗体不断更新
主窗体:
public partial class UserInfoList : Form
{
private DataSet dataSet = new DataSet();
private SqlDataAdapter dataAdapter;
public UserInfoList()
{
InitializeComponent();
}
public void Bind1()
{
FillDgv("SELECT * FROM Info RIGHT OUTER JOIN Result ON Info.客户代码 = Result.KHDM");
dgvInfoList.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
}
public void UserInfoList_Load(object sender, EventArgs e)
{
Bind1();
}
public void FillDgv(string sqlstr)
{
string sql = sqlstr;
dataAdapter = new SqlDataAdapter(sql, DBHelper.connection);
dataAdapter.Fill(dataSet)
dgvInfoList.DataSource = dataSet.Tables[0];
DBHelper.connection.Close();
}
子窗体:
private void btnOK_Click(object sender, EventArgs e)
{
//调用验证输入方法
if (ValidateInput())
{
//打开数据库连接
DBHelper.connection.Open();
//编写插入sql语句
string sql = string.Format("INSERT INTO Result(KHDM ,[TIME] ,RESULT)VALUES ('{0}','{1}','{2}')", this.lblKHMC.Text.Trim(), DateTime.Parse(dtpTime.Text).ToString("yyyy/MM/dd"), cboResult.Text);
SqlCommand command = new SqlCommand(sql, DBHelper.connection);
int result = (int)command.ExecuteNonQuery();
if (result > 0)
{
MessageBox.Show("添加成功!", "操作提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
num++;
this.txtUser.Text = list[num];
this.lblKHMC.Text = listId[num];
UserInfoList a = new UserInfoList();
a.Bind1();/////////////////////////点击确定,显示后面窗体的刷新内容??????????
DBHelper.connection.Close();
}
}
在子窗体中往数据库中INSERT一条数据的同时,往DataTable中也Add一条数据。
这样主界面就自动会显示最新的数据。
因为你的a和你的主窗体不是同一个对象。
你需要在子窗体里声明一个主窗体类型的引用。
当你打开子窗体时,要把主窗体的引用传给子窗体。
在你点击确定后取执行这个主窗体引用的Bind1()方法//主窗体
public partial class UserInfoList : Form
{
private DataSet dataSet = new DataSet();
private SqlDataAdapter dataAdapter; public void Bind1()
{
//Do bind data.
}
public void UserInfoList_Load(object sender, EventArgs e)
{
Bind1();
} public void showChild()
{
ChildForm cf = new ChildForm();
cf.m_parent = this;
cf.Show();
}
}
//子窗体:
public class ChildForm : Form
{
public UserInfoList m_parent;
private void btnOK_Click(object sender, EventArgs e)
{ if (result > 0)
{
MessageBox.Show("添加成功!", "操作提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
m_parent.Bind1();/////////////////////////点击确定,这里将刷新主窗体。
}
}里面没有关系的代码我去掉了,我只是写了个样式没有编译测试。
BTW:以后问问题把代码整理了再贴上来,别整一驼代码扔上来。别人没时间练找茬。
1、子窗体class前定义 public delegate void Callback();
// 后再子窗体中添加如下代码
public event Callback Callevent=null; //放在btnOK_Click事件中
Callevent();
2.主窗体
调用委托事件
子窗体 chil = new 子窗体();
chil.Show();
chil.Callevent += new Callback(chil_Callevent); void chil_Callevent()
{
this.Bind1();
}
//OK该方法最合理
{
//数据绑定的方法
}//打开子窗体
private void button1_Click(object sender,eventargs e)
{
Form2 f2=new Form2(this); //将主窗体作为参数传递给子窗体
f2.Show();
}子窗体:
在子窗体的构造函数中修改代码:
Form1 f1 = new Form1();
public Form2(Form1 frm1)
{
f1= frm1;
InitializeComponent();
}子窗体中点击上一条下一条时刷新父窗体:
if (result > 0)
{
MessageBox.Show("添加成功!", "操作提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
num++;
this.txtUser.Text = list[num];
this.lblKHMC.Text = listId[num];
UserInfoList a = new UserInfoList();
f1.Bind1();/////点击确定,显示后面窗体的刷新内容
DBHelper.connection.Close();
}