我有一个 SQL 服务器,我想以我的应用程序的主要形式显示它。我遵循了一些指南,并成功尝试在 dataGrid 和 SQL 服务器表之间进行链接。
问题是当我想更新数据网格并再次从 SQL 服务器同步/重新加载表时。
updateDatadrid()
我有一个事件处理程序,每次在数据库中添加/编辑行时都会调用一个函数。
当我第一次启动应用程序时,我正在调用此函数并且它正在工作,但之后如果我再次使用该处理程序调用它,我会遇到一些错误。
跨线程操作无效:控件''从创建它的线程以外的线程访问。
函数外(全局变量):
SqlConnection sConDataGrid;
DataSet dbDataSet;
SqlDataAdapter da;
BindingSource dbBind;
string sqlCommand;
EDIT - I forgot to add :
DataGridView _dbView;
这是我的代码:
private void updateDataGrid()
{
using (sConDataGrid = new SqlConnection("Data Source=" + SettingsForm.getAddress + ";Initial Catalog=" + SettingsForm.getDatabase + ";Integrated Security=False;User Id=" + SettingsForm.getUser + ";Password=" + SettingsForm.getPassword + ";Connect Timeout=0;"))
{
sConDataGrid.Open();
sqlCommand = "select top 200 * FROM cstPackages order by _dateTime desc"; //reading the db from end to start
using (da = new SqlDataAdapter(sqlCommand, sConDataGrid))
{
da.Fill(dbDataSet, "cstPackages");
dbBind = new BindingSource(dbDataSet, "cstPackages");
_dbView.DataSource = dbBind;
sConDataGrid.Close();
}
}
}
我尝试使用它,仅在da.Fill()
我第一次调用此函数后调用该函数,但它没有刷新数据网格。我试图在再次填充之前清除数据集,但它使程序崩溃。我试着去做,_dbView.Refresh()
但它没有那么好..
编辑
我不明白,为什么如果我制作一个按钮,然后放置“click”事件处理程序,并且我正在从这个事件处理程序调用我的函数 - 它正在工作!如果我从SerialPort
dataReceived
事件处理程序调用这个函数 - 我得到这个错误!有什么不同?我想也许我没有以正确的方式创建事件处理程序,所以我只是SerialPort
从设计器中拖动了一个控件并双击事件,同样的事情发生了。
我尝试制作一个计时器,将其置于启用状态并在函数结束时调用它stop()
,并在接收到的串行中将其设置为start()
但我在SerialPort
处理程序中所做的一切就像“在”程序之外。它不会启动计时器。