【发布时间】:2021-12-10 01:32:58
【问题描述】:
我制作了一个 winforms 项目,让我可以使用 SQLite 搜索并添加到 SQL 数据库中。
一种形式具有包含与疾病相关的症状或种类的 TreeView 和 CheckedBoxList。这些控件以编程方式填充它们自己的公共非静态函数。
另一种形式让我编辑数据库,特别是添加一个节点到 TreeView 或症状列表。编辑数据库后,它会激活更新上述控件的功能。
我希望它会立即更新控件,但事实并非如此。
我尝试过的一些解决方案:this.Refresh();this.Invalidate();this.BeginUpdate(); 和this.EndUpdate();
我已经单独或一次完成了它们;尝试了“this.”、“Form1”。和“treeView1。”;但没有人设法更新表单或控件。
然后我想'也许从 Form2 更新 Form1 上的控件与在 Form1 上更新自身不同',所以我添加了 Form1.treeView1.Nodes 以确保它专注于正确的控件。 这仍然没有显示新添加的节点或 checkBoxList 项。
表格1:
using System.Data.SQLite;
// ///
public void UpdateCheckedBoxList(SQLiteConnection conn) {
SQLiteDataReader sqlite_datareader;
SQLiteCommand sqlite_cmd = conn.CreateCommand();
sqlite_cmd.CommandText = "SELECT * FROM Species; ";
sqlite_datareader = sqlite_cmd.ExecuteReader();
List<string> myreader = new List<string> { };
while (sqlite_datareader.Read()) {
myreader.Add(sqlite_datareader.GetString(1));
}
string[] Species = myreader.ToArray();
checkedListBox1.Items.AddRange(Species);
this.Refresh();
}
表格2:
SQLiteCommand sqlite_conn = new SQLiteConnection("Data Source=" +
"C:\\Users\\" + Environment.UserName + "\\Documents\\ddx project\\ddx-database.db; Version = 3; New = True; Compress = True;");
sqlite_conn.Open();
new Form1().UpdateCheckedBoxList(sqlite_conn);
【问题讨论】:
-
您是否尝试刷新checkedListBox 本身而不是表单?
-
是的,我已经为treeView、Form 和checkedListBox 尝试过,但遗憾的是没有更新。只有当我从同一个表单中激活该功能时,它才会更新表单/控件。
-
这个
new Form1().UpdateComboBox(sqlite_conn);创建了一个新的Form1,而不是你正在处理的那个。通过参数化的ctor将Form1传递给Form2,或者用Application.OpenForms.OfType<Form1>().First().UpdateComboBox(sqlite_conn);替换该行。 -
"Refreshing" 通常只是重新绘制控件。正确的数据绑定将允许更改顺利进行,而无需您的英雄行为
标签: c# winforms controls refresh