删除/添加/更新后

时间:2020-09-15 11:04:59

标签: winforms datatable combobox

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

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

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

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

在SO论坛和其他论坛中,我一直关注着每个答案,但是无论如何都无法使它起作用。

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

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

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

comboBox1.SelectedIndex = -1;

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

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

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()方法(注释行),但没有用。我也尝试重置数据表,要么它不起作用,要么我没有编写正确的代码。

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

我们无法重置表单,我知道表单应用程序中不存在自动回发功能。 当然,我们已经选择了“更改索引”,不完全了解它的工作原理。

此外,实际上,数据库实际上是一个数据库文件。

我希望我能够清楚地阐明我的问题。请帮助。

1 个答案:

答案 0 :(得分:0)

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

datatable.Clear();

感谢大家的宝贵意见。

相关问题