【发布时间】:2021-05-25 21:34:53
【问题描述】:
使用 C# 和 Winform。
我阅读了几个类似的问题,但找不到任何可以与我的代码互锁的好答案。所以,请耐心等待,并提前感谢您对我的帮助。
我有一个包含多个用户控件的表单。在第一个用户控件中,您可以从数据库中插入、更新和删除记录。在第二个用户控件中,有一个填充了所有记录的 datagridview。
我遇到的问题是,每当我在第一个用户控件中插入、更新或删除记录时。当我切换到第二个用户控件时,它不会在 datagridview 内刷新。
下面是填充数据网格视图的第二个用户控件
private void populate()
{
database.OpenConnection();
string query = "SELECT id, name, qoute, time, date from maintable";
SQLiteDataAdapter sda = new SQLiteDataAdapter(query, database.connection);
SQLiteCommandBuilder builder = new SQLiteCommandBuilder(sda);
var ds = new DataSet();
sda.Fill(ds);
dtgNav.DataSource = ds.Tables[0];
databas.CloseConnection();
}
private void Navigation_Load(object sender, EventArgs e)
{
populate();
dtgNav.Columns[0].HeaderText = "ID";
}
public void Refresh()
{
this.Refresh();
}
下面是在first用户控件中向datagridview添加记录的代码
private void btnAdd_Click(object sender, EventArgs e)
{
database.OpenConnection();
string query = "INSERT INTO maintable (`id`, `name`, `qoute`, `time`,`date`) VALUES (@Id, @Name, @Qoute, @Time, @Date)";
SQLiteCommand command = new SQLiteCommand(query, database.connection);
command.Parameters.AddWithValue("@Id", tbxID.Text);
command.Parameters.AddWithValue("@Name", tbxName.Text.Trim());
command.Parameters.AddWithValue("@Qoute", tbxQoute.Text.Trim());
command.Parameters.AddWithValue("@Time", tbxTime.Text.Trim());
command.Parameters.AddWithValue("@Date", dtpDate.Value.ToString("yyyy-MM-dd"));
command.ExecuteNonQuery();
MessageBox.Show("Added new event into the database.");
database.CloseConnection();
usercontrol2.Refresh();
}
如果我们能找到一种方法来在单击按钮时刷新 datagridview 而不会过多地更改原始代码,我将不胜感激。
【问题讨论】:
-
我这样做的方法是将 DGV 绑定到 BindingSource(反过来,绑定到 DGV 数据,通常是
List<T>)。当我想更新 DGV 时,我在 BindingSource 上调用ResetBindings
标签: c# winforms datagridview