【问题标题】:How to refresh a datagridview for new stored data?如何为新存储的数据刷新 datagridview?
【发布时间】:2013-10-29 07:07:59
【问题描述】:

大家好,我有一个 DataGridView,里面有 2 列,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();
        }
    }

【问题讨论】:

  • 我猜你可以在另一个线程中执行此操作,每隔几分钟左右就会触发一些方法。

标签: c# winforms sql-server-2008


【解决方案1】:

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

方式:

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

【讨论】:

  • 得到了这个想法,非常感谢哈哈,我的投票系统已经完成了.. :)
【解决方案2】:

当您想刷新数据时调用此函数。

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");
}

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      使用计时器并执行此操作

      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 进行更改,请执行此操作。 如果刷新表时对数据表进行更改,则对数据表的更改将被删除

      【讨论】:

        【解决方案5】:

        您可以使用 Sql server CLR 集成。 Here Here

        我会在阅读后发布更多详细信息,但我希望它能给你一个方向,或者你可能会找到你的解决方案。

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

        CLR SP

        【讨论】:

          【解决方案6】:

          有两种情况:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-01-02
            • 2015-06-25
            • 1970-01-01
            • 2010-09-20
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多