C# 如何为新存储的数据刷新datagridview?

C# 如何为新存储的数据刷新datagridview?,c#,winforms,sql-server-2008,C#,Winforms,Sql Server 2008,大家好,我有一个DataGridView,里面有两列,FullName和VoteCount。我想刷新DataGridView,以了解数据库中的更改。如何在不关闭表单或单击任何按钮的情况下刷新DatagridView?可能吗 这是我的密码: private void President() { sc.Open(); cmd = new SqlCommand("SELECT (LastName + ', ' + FirstName + ' ' + Mi

大家好,我有一个DataGridView,里面有两列,FullNameVoteCount。我想刷新DataGridView,以了解数据库中的更改。如何在不关闭表单或单击任何按钮的情况下刷新DatagridView?可能吗

这是我的密码:

    private void President()
    {
        sc.Open();
        cmd = new SqlCommand("SELECT (LastName + ', ' + FirstName + ' ' + MiddleName) as FullName,Vcount as VoteCount FROM TableVote WHERE Position='President'", sc);

        try
        {
            _da = new SqlDataAdapter();
            _da.SelectCommand = cmd;
            DataTable _dt = new DataTable();
            _da.Fill(_dt);
            BindingSource bs = new BindingSource();
            bs.DataSource = _dt;
            PresDG.DataSource = bs;
            _da.Update(_dt);

            PresDG.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
            PresDG.Columns["FullName"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
            PresDG.Columns["VoteCount"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
            PresDG.Columns["VoteCount"].Width = (100);
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
        finally
        {
            sc.Close();
        }
    }

我认为您必须重新填充完整的DataGridView

方式:

  • 您可以使用Microsoft Tick类在给定的时间间隔内执行此操作
  • 您可以使用Microsoft Tick类检查数据库中的更改。如果有一些更改,请重新填充完整的DataGridView

  • 您的数据库是否经常更新?如果是这样,您可以使用计时器进行定期更新。

    您可以使用Sql server CLR集成。

    我将张贴在更多的细节后,一点阅读,但我希望它可以给你一个方向,直到那或你可能会找到你的解决方案

    更新 您可以创建一个触发器应用程序,并使用该触发器应用程序调用绑定gridview的方法。 这是一个编写触发器并实现它的好例子

    有两种情况:

    • 如果经常刷新datagridview,则将计时器设置为 更新结果
    • 如果在插入或更新操作后刷新,则在 操作结束时,请调用绑定方法

    使用计时器并执行此操作

    string connectionString = "SERVER=" + server + ";" + "DATABASE=" +
    database + ";" + "UID=" + uid + ";" + "PASSWORD=" + password + ";";
    
    MySqlConnection conn = new MySqlConnection(connectionString);
    MySqlDataAdapter adptr = new MySqlDataAdapter("Select * FROM " + tableName, conn);
    DataTable tabloSql = new DataTable();
    adptr.Fill(tabloSql);
    dataGridView1.DataSource = tabloSql;
    
    注意:如果您的程序没有对数据表进行更改,请执行此操作。
    如果在刷新数据表时对datatable进行了更改,则对datatable所做的更改将被删除

    在需要刷新数据时调用此函数

    YourGrid.DataSource = Refresh("SELECT...");
    
    private BindingSource Refresh(string sql)
    {
        try
        {
            using (var da = new SqlDataAdapter(sql, new SqlConnection(Properties.Settings.Default.ConnectionString)) { FillLoadOption = LoadOption.Upsert })
            {
                da.SelectCommand.Connection.Open();
                da.Fill(dataSet.YourTable);
            }
        }
        catch(Exception ex) { MessageBox.Show(ex.Message); }
    
        return new BindingSource(dataSet, "YourTable");
    }
    

    我想你可以在另一个线程中完成,每隔几分钟左右就会触发一些方法。明白了,谢谢,哈哈,我的投票系统已经完成了……)