添加数据后的C#,刷新组合框

时间:2016-03-05 03:56:16

标签: c#

我已经阅读了很多关于同样事情的其他问题,但似乎答案与我执行代码的方式无关。从用户界面向我的数据库添加或删除记录或信息行后,在重新启动应用程序之前,它不会显示在组合框中。也许有人可以启发我,因为我对此有些新意。单击添加按钮时,下面是我的代码。

 private void FBinterface_Load(object sender, EventArgs e)
    {
        txtSerial.Focus();
        try
        {
            connection.Open();

            OleDbCommand command = new OleDbCommand();
            command.Connection = connection;
            string SerialQuery = "select SerialNumber from Inventory";
            command.CommandText = SerialQuery;

            //TO READ DATA
            OleDbDataReader reader = command.ExecuteReader();
            while (reader.Read())
            {
                comboSerial.Items.Add(reader["SerialNumber"]);
            }
            connection.Close();
        }
        catch (OleDbException ex)
        {
            MessageBox.Show(ex.Message);
            connection.Close();
        }

 private void btnAdd_Click(object sender, EventArgs e)
    {
        if (!string.IsNullOrEmpty(txtSerial.Text))
        {
            try
            {
                connection.Open();

                OleDbCommand command = new OleDbCommand();
                command.Connection = connection;
                command.CommandText = @"insert into
                    Inventory(SerialNumber,PartNumber,ROnumber,Location)
                    values ('" +
                        txtSerial.Text + "','" +
                        txtPart.Text + "','" +
                        txtRO.Text + "','" +
                        txtLocation.Text + "')";
                //TO READ DATA
                command.ExecuteNonQuery();
                MessageBox.Show("Inventory Added");

                txtPart.Clear();
                txtSerial.Clear();
                txtRO.Clear();
                txtLocation.Clear();

                if (dataGridFB.DataSource != null)
                {
                    dataGridFB.DataSource = null;
                }
                else
                {
                    dataGridFB.Rows.Clear();
                }
                txtSerial.Focus();
                connection.Close(); // CLOSE HERE OR
                                    // YOU CANNOT ENTER RECORDS SIMULTANEOUSLY
            }
            catch (OleDbException ex)
            {
                MessageBox.Show(ex.Message);
                connection.Close();
            }
        }
    }

2 个答案:

答案 0 :(得分:2)

作为一个简单的修复,您可以在connection.Close()事件处理程序中的行btnAdd_Click之前添加以下代码段:

            OleDbCommand command = new OleDbCommand();
            command.Connection = connection;
            string SerialQuery = "select SerialNumber from Inventory";
            command.CommandText = SerialQuery;

            //TO READ DATA
            OleDbDataReader reader = command.ExecuteReader();
            while (reader.Read())
            {
                comboSerial.Items.Add(reader["SerialNumber"]);
            }

此代码段基本上会重新绑定ComboBox comboSerial。如果其基础数据受btnAdd_Click过程影响,则其他ComboBox也是如此。此外,创建专用过程(类似ResfreshAllComboBoxes())可能很有成效,将代码放在上面的示例代码段中,并在基础数据更改后调用它。

希望这可能会有所帮助。

答案 1 :(得分:1)

最好将代码放入(FBinterface_Load)新方法中,例如FillComboSerial(),然后在关闭连接后立即插入每个新记录后调用该方法。