【发布时间】:2021-01-02 03:10:39
【问题描述】:
我正在使用 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() 方法(注释行),但没有成功。我也试过重置数据表,要么没用,要么我写的代码不正确。
重启应用,问题解决。我只需要在执行操作时立即更新组合框中的值的帮助,而无需重新启动应用程序。
我们无法重置表单,我知道表单应用程序中没有自动回发。 当然我们已经更改了 Selected Index,但不知道它是如何工作的。
此外,除了所有这些,数据库实际上是一个数据库文件。
我希望我能够清楚地表达我的问题。请帮忙。
【问题讨论】:
-
用 TabControl 测试,在我的测试中一切正常。您能否提供Minimal, Reproducible Example 来重现此问题?或者你可以添加断点来检查重新绑定代码是否执行。
-
row[0] = "" 是在组合框中将第一行设为空白,即使我们将其删除,也不是什么大问题。此外,由于组合框位于不同的选项卡中,并且值的选择仅用作下拉列表,因此数据源是否相同并且相同的选择被带到另一个选项卡并不重要。但肯定会尝试为另一个组合框使用不同的数据源。令人惊讶的是,它对我不起作用。我不知道我可能会错过什么。 @Username 参数正在从登录页面传递,这可能是问题吗?
标签: winforms datatable combobox