首页 > 解决方案 > 删除/添加/更新后组合框值不会刷新

问题描述

我正在使用 C# 开发一个 Windows 窗体应用程序。单个表单具有带有三个选项卡的选项卡控件。第一个选项卡是添加在 db 中更新的记录。第二个选项卡有一个绑定到数据源的组合框(数据表从 db 获取记录)。这个特定的组合框仅列出表中特定列的值,并有一个查看按钮来查看从组合框中选择的记录用户的详细信息。

第三个选项卡有一个类似的组合框,但在这里,我正在更新/删除记录。

现在,当我在第一个选项卡中添加记录时,第二个选项卡的组合框中的值不会更新(以便我可以从组合框中选择最新添加并查看详细信息)

同样在第三个选项卡中,当我编辑/删除特定记录时,组合框(在第二个选项卡和第三个选项卡中)中不会更新。

我已经关注了 SO 和其他论坛中的每一个答案,但不知何故无法让它发挥作用。

我尝试将数据源设置为 null 并清除组合框值,然后再次调用将值添加到组合框的方法,但没有用。我在下拉列表中有三条记录,删除了第一条,它仍然显示我之后同样的三个记录。

comboBox1.DataSource = null;
comboBox1.Items.Clear();

我也尝试将索引设置为 -1,但不起作用,它仍然显示相同的三个记录。

comboBox1.SelectedIndex = -1;

我尝试重置数据表并再次调用上述方法,没有奏效。

下面是数据源方法,它在表单加载时被调用。

public void pageload()
        {
            using (SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\PSDB.mdf;Integrated Security=True;Connect Timeout=30"))
                try
                {
                    string cmdstr = "Select Name from PasswordSafe where Username= @Username";
                    SqlCommand cmd = new SqlCommand(cmdstr, con);
                    cmd.Parameters.AddWithValue("@Username", Login.SetValueForText1);
                    SqlDataAdapter adp = new SqlDataAdapter(cmd);
                    //DataTable dt = new DataTable();
                    con.Open();
                    //DataSet DS = new DataSet();
                    adp.Fill(dt);
                    DataRow row = dt.NewRow();
                    row[0] = "";
                    //row[1] = "Please select";
                    dt.Rows.InsertAt(row, 0);
                    comboBox1.DataSource = dt;
                    comboBox1.DisplayMember = "Name";
                    comboBox2.DataSource = dt;
                    comboBox2.DisplayMember = "Name";
                    con.Close();
                }
                catch
                {

                }
            
        }

这是修改组合框值的删除按钮(只是一个例子,我也有添加按钮和编辑按钮)

private void button7_Click(object sender, EventArgs e)
        {
            deletepassword();
            comboBox1.DataSource = null;
            comboBox1.Items.Clear();
            comboBox2.DataSource = dt;
            comboBox2.DisplayMember = "Name";
            //pageload();
        }

我也尝试再次调用 pageload() 方法(注释行),但没有用。我也尝试重置数据表,要么它不起作用,要么我没有编写正确的代码。

重启应用,问题解决。我只需要在执行操作时立即更新组合框中的值的帮助,而无需重新启动应用程序。

我们无法重置表单,我知道表单应用程序中没有自动回发。当然我们已经改变了选定的索引,不完全知道它是如何工作的。

此外,除了所有这些之外,数据库实际上是一个数据库文件。

我希望我能够清楚地表达我的问题。请帮忙。

标签: winformsdatatablecombobox

解决方案


我通过在再次点击数据源之前清除数据表解决了这个问题。

datatable.Clear();

感谢大家的宝贵意见。


推荐阅读