在MDB更新后显示消息框

时间:2013-12-29 19:20:54

标签: c# sql winforms ms-access datagridview

我将如何:

  1. 在成功的MDB SQL条目之后创建一个确认对话框(仅包含ok选项) - 表单将关闭
  2. 更新form1上的 datagridview1 以反映新的更改,此更新只能在用户单击确认对话框上的ok按钮或MDB SQL条目之后进行。
  3. 目前,用户无法确认SQL条目是否成功。 Form2通过Form1打开,Form1保持打开而Form2打开 - 因此更新需要在后台进行。没有必要重新打开Form1。

    如果您需要任何进一步的信息,请告诉我。

    这是设置动作的代码:

    private void save_btn_Click(object sender, EventArgs e)
    {
    
        if (pgpText.Text.Trim().Length == 0)
        {
            MessageBox.Show("Please fill the following textbox: PGP");
        }
        else if (teamText.Text.Trim().Length == 0)
        {
            MessageBox.Show("Please fill the following textbox: Team");
        }
        else
        {
    
            using (OleDbConnection conn = new OleDbConnection())
            {
                string pgp_new = pgpText.Text;
                string pgp_old = pgpOld.Text;
                string team = teamText.Text;
                conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source='db.mdb'";
                OleDbCommand command = new OleDbCommand();
                command.Connection = conn;
                command.CommandText = "UPDATE PGP SET PGP=?,Team=? WHERE PGP=?";
                command.Parameters.Add("pgp_new", OleDbType.VarChar).Value = pgp_new;
                command.Parameters.Add("team", OleDbType.VarChar).Value = team;
                command.Parameters.Add("pgp_old", OleDbType.VarChar).Value = pgp_old;
                conn.Open();
    
                int affectedRows = (int)command.ExecuteNonQuery();
    
                if (affectedRows == 0)
                {
                    command.CommandText = "INSERT INTO PGP (PGP,Team) VALUES (?, ?)";
                    command.Parameters.RemoveAt(2);
                    command.ExecuteNonQuery();
                }
            }
        }
    }
    

1 个答案:

答案 0 :(得分:1)

如果我理解正确......

你想要:

  1. Form2
  2. 打开Form1
  3. 执行您的SQL(Form2
  4. 关闭Form2
  5. DataGridView
  6. 中更新Form1

    这是一种可能的解决方案:首先,您必须设置Form2 open方法,将其视为Dialog。你在Form1

    中写了这样的东西
    private void openForm2()
    {
        var f2 = new Form2(); //create new form2
        var formResult = f2.ShowDialog(); //open as Dialog and check result after close event
        if (formResult == DialogResult.OK) //check form2 dialog result
        {
            //form2 gave OK, I can update my DGV and display msg
            MessageBox.Show("DGV will be updated", "", MessageBoxButtons.OK, MessageBoxIcon.Information);
            //update my DGV
            UpdateDGV();
        }
        else
        {
            //form2 passed Cancel or something else, not good
            MessageBox.Show("Form2 Closed but nothing happened.", "", MessageBoxButtons.OK, MessageBoxIcon.Warning);
        }
    }   
    

    现在您已经打开了Form2,您必须检查您的查询是否执行了某些操作...如果成功,您可以传递OK结果并关闭它。这就是Form2中发生的事情

    int affectedRows = (int)command.ExecuteNonQuery();
    
    if (affectedRows == 0)
    {
        //no records to UPDATE, will INSERT
        command.CommandText = "INSERT INTO PGP (PGP,Team) VALUES (?, ?)";
        command.Parameters.RemoveAt(2);
        //rows affected by INSERT statement
        affectedRows = (int)command.ExecuteNonQuery();
    }
    
    if (affectedRows > 0)
    {
         //ok some rows were affected, close the form and pass OK result
         this.DialogResult = DialogResult.OK;
    }
    

    最后,在Form1中编写UpdateDGV()函数并更新数据!

    可能有错误,但一般的想法是......祝你好运