我有一個SQL服務器,我想在我的應用程序的主窗體中顯示它。 我遵循一些指南,併成功地嘗試鏈接dataGrid和SQL Server表。從SQL服務器更新datagrid - 更新過程不起作用
問題是,當我想更新數據網格並同步/重新從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()
但它沒有工作以及..
編輯 我不明白,爲什麼,如果我做一個按鈕,我把「點擊」事件處理程序,我」 m從這個事件處理程序調用我的函數 - 它的工作! 如果我從SerialPort
dataReceived
事件處理程序調用此函數 - 我得到這個錯誤!有什麼不同? 我想也許我創建的事件處理程序不是以正確的方式創建的,所以我只是拖動了一個SerialPort
控件窗體設計器,並雙擊事件,發生了同樣的情況。
我試圖讓一個計時器,把它啓用,並在函數結束就打電話給stop()
,並且在連續接收到其設置爲start()
,但一切我在SerialPort
處理程序做的是像「外部」程序。它不啓動計時器。
我假設_dbView是你的DataGrid。是對的嗎?您是否在設置DataSource的行之後嘗試過_dbView.DataBind()? – Melanie
@Melanie - 是的,這是我的DatGrid,我沒有嘗試過,但我沒有檢查,並沒有這樣的功能:/ – Itay
_Cross-thread操作無效:控制'從非線程訪問它創建的線程._什麼控制和發生此錯誤的位置?看起來你試圖從不同的線程訪問某些東西,而不是創建東西。可能是dataGridView。解決方案可以通過Invoke訪問它,但不能告訴你更多,除非你提供有關錯誤的更多細節 – erem