我已经阅读了很多关于同样事情的其他问题,但似乎答案与我执行代码的方式无关。从用户界面向我的数据库添加或删除记录或信息行后,在重新启动应用程序之前,它不会显示在组合框中。也许有人可以启发我,因为我对此有些新意。单击添加按钮时,下面是我的代码。
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();
}
}
}
答案 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(),然后在关闭连接后立即插入每个新记录后调用该方法。