我有两窗体,一个列表在下面,一个是添加在上面
我想点击添加窗体的确定键,后面类表里面就显示添加的内容 ,点击确定,后面刷新,下一条再点击,后面刷新,子窗体一直在上面操作,主窗体不断更新
主窗体:
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();
              }
        }

解决方案 »

  1.   

    把主窗体里面dgvInfoList.DataSource的DataTable传到子窗体中。
    在子窗体中往数据库中INSERT一条数据的同时,往DataTable中也Add一条数据。
    这样主界面就自动会显示最新的数据。
      

  2.   

    按你提供的代码 确定后主窗体是不会刷新的。
    因为你的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:以后问问题把代码整理了再贴上来,别整一驼代码扔上来。别人没时间练找茬。
      

  3.   

      直接用委托事件就可以了:首先Bind1方法为无返回类型,那就用无返回类型的delegate
    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该方法最合理   
      

  4.   

    http://topic.csdn.net/u/20110225/11/de02cc70-38fd-4fb9-b1e7-a07ea7fd8062.html委托 事件
      

  5.   

    简单点,主窗体在生成添加窗体时把dgvInfoList列表传递过去...addform addf=new addfrom(dgvInfoList);这样即可以在添加窗体中直接操作主窗体列表;
      

  6.   

    那个你数据库那两个表字段能不改成CustomerNO啊,看着太让人扎心了。
      

  7.   

    主窗体:public void bind()
    {
        //数据绑定的方法
    }//打开子窗体
    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();
      }