【问题标题】:DataTable attached to SQL Database with function in query not automatically updatingDataTable 附加到 SQL 数据库,查询中的函数不会自动更新
【发布时间】:2014-11-21 00:04:16
【问题描述】:

我正在尝试将我的 Datagridview 绑定到 SQL 数据库。当我从另一个源(从 Visual Stuido 中的 SQL 查询)更新数据库时,DataGridView 或基础 DataTable 中不会显示更改。

我正在运行我的程序,使用以下函数填充 DataGridView,然后使用 Visual Studio 中的 SQL 查询更改数据库。 DataGridView 不更新,DataTable 不触发 RowChanged 事件!

_query = "SELECT * FROM myFunction(0) ORDER BY timestamp DESC";
_connection = new SqlConnection("working connection string");
_adapter = new SqlDataAdapter(_query, _connection);
_cmdBuilder = new SqlCommandBuilder(_adapter);

_table = new DataTable();
_table.RowChanged += _table_RowChanged;

_adapter.Fill(_table);

_bindingSource = new BindingSource();
_bindingSource.DataSource = table;
_dataGridView.DataSource = _bindingSource;

// DataGridView is now populated

// run sql query externally from the program
// to update one of the rows/columns that the above function will return

// never updates datagridview and never updates the row in dataTable

我认为问题与功能有关,适配器是否不断通过查询轮询数据库?如果没有,我可以看到它无法判断它已更新。

【问题讨论】:

标签: c# sql sql-server data-binding datagridview


【解决方案1】:

如果我没看错的话,你有一个数据绑定的 DataGridView,它的 DataSource 是一个 DataTable。您已经使用一些 SQL 以编程方式更改了实际数据库的表,并且期望在 DataGridView 中看到更新。那不会飞的,伙计。更新实际数据库后,您应该刷新数据源,将其转换为 DataTable 并使用第一次填充它时使用的相同 SQL 用 SqlDataAdapter 重新填充它。更新实际数据库不会反映在您的数据源中,您必须自己进行。

【讨论】:

  • 非常感谢您的帮助。我尝试添加一个仅运行 _adapter.Fill(_table); 的“更新”按钮但这也没有看到数据库已经更新。如果我再次在 OP 中执行整个代码块,它将看到它已更新。有什么想法吗?
  • 这是一个[example] 我很快就编写好了代码。现在是午夜过后,我早上有工作。但你应该明白这一点。这很简单,设置 datagridview 的数据源,然后通过给它一个新的数据表来显式地刷新它。实际设置数据源的行可以提取到单独的 FillData() 方法中。查询可以存储在字符串 var 中,而不是被硬编码两次。真的很草率,但它确实有效。 :P
  • 好的,所以我的想法是在后台工作人员上轮询数据库,然后将任何更改发布到 DataTable。有没有好的方法来做到这一点?或者一种比较 DataTables 以查看它们是否不同的方法?
  • 好问题。这是一个关于 SqlDependency 类的article,它将在数据库更改时通知您。无需投票。 :]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-22
  • 1970-01-01
相关资源
最近更新 更多