通过SQL命令的INSERTED数据无法在comboBox1中正确显示

时间:2014-02-16 12:10:26

标签: c# .net winforms combobox

我有一个问题,在我将数据插入到我的SQL Lite数据库后,combobox1不会刷新以正确显示数据。插入数据后,我只需调用以下方法:

void fillcomboBox1()
{
    if (m_dbConnection != null && m_dbConnection.State == ConnectionState.Closed)
    {
        m_dbConnection.Open();
    }

    SQLiteDataAdapter da = new SQLiteDataAdapter("select * from rdpdirectory order by company asc", m_dbConnection);

    DataTable dt = new DataTable();

    da.Fill(dt);

    for (int i = 0; i < dt.Rows.Count; i++)
    {
        comboBox1.Items.Add(dt.Rows[i]["Company"]);
    }
    m_dbConnection.Close();
}

我的插入代码如下所示:

    void InsertConnectionDetails()

    {
        if (m_dbConnection != null && m_dbConnection.State == ConnectionState.Closed)
        {
            m_dbConnection.Open();
        }



        string sql = @"insert into rdpdirectory (company, server, username, password) 
                   values (@company, @server, @username,@password)";

        SQLiteCommand command = new SQLiteCommand(sql, m_dbConnection);
        command.Parameters.AddWithValue("@company", txtCompany.Text);
        command.Parameters.AddWithValue("@server", txtServer.Text);
        command.Parameters.AddWithValue("@username", txtUserName.Text);
        command.Parameters.AddWithValue("@password", txtPassword.Text);

        command.ExecuteNonQuery();

        m_dbConnection.Close();
        fillcomboBox1();
        comboBox1.Refresh();
        MessageBox.Show("Done");

}

我认为这个想法是再次填充数据表,组合框应该显示值?问题特别是我看到相同值的重复,但当我重新启动应用程序时,正确插入的值显示。

2 个答案:

答案 0 :(得分:1)

问题:每次调用fillcomboBox1()方法时,都会将项目添加到Combobox中。

所以,如果你两次调用fillcomboBox1()方法,当你要两次添加项目时,ComboBox将会有重复的项目。

解决方案:您需要在添加项目之前清除ComboBox中的项目。  在将项目添加到comboBox1.Items.Clear()之前,您可以使用Combobox方法清除fillcomboBox1()中的所有现有项目。

将以下语句添加到comboBox1.Items.Clear(); 方法中。

void fillcomboBox1()
{
comboBox1.Items.Clear();// <---Add this statement
if (m_dbConnection != null && m_dbConnection.State == ConnectionState.Closed)
{
    m_dbConnection.Open();
}

SQLiteDataAdapter da = new SQLiteDataAdapter("select * from rdpdirectory order by company asc", m_dbConnection);

DataTable dt = new DataTable();

da.Fill(dt);

for (int i = 0; i < dt.Rows.Count; i++)
{
    comboBox1.Items.Add(dt.Rows[i]["Company"]);
}
m_dbConnection.Close();
}

完整代码:

{{1}}

答案 1 :(得分:1)

将comboBox1绑定如下

void fillcomboBox1()
{
    // your code .....

    da.Fill(dt);
    comboBox1.DataSource = dt; // set DataSource  as your DataTable
    comboBox1.DisplayMember = "Company"; // you only need to set the display column name
    m_dbConnection.Close();
}

否则您需要清除添加新项目的项目