【问题标题】:Refresh datagridview from another user control从另一个用户控件刷新 datagridview
【发布时间】: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


【解决方案1】:

你在第二个用户控件中有一个public void Refresh 方法,尝试修改this.Refresh();,说populate();。这应该调用您在加载时调用的 private void populate 方法,该方法应该重新加载网格。让我知道这是否有帮助。

【讨论】:

  • Refresh 只是导致控件被重新绘制 - 与数据无关
  • @ŇɏssaPøngjǣrdenlarp 提问者发布了public void Refresh() {...} 方法。这个答案只是建议在该方法中添加行populate();
猜你喜欢
  • 2011-11-11
  • 2012-05-25
  • 2015-01-16
  • 1970-01-01
  • 2013-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-09
相关资源
最近更新 更多