У меня есть 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()
, но это тоже не сработало..
РЕДАКТИРОВАТЬ Я не понимаю, почему если я делаю кнопку, и ставлю обработчик события "щелчок", и я вызываю свою функцию из этого обработчика события - она работает! И если я вызываю эту функцию из обработчика событий SerialPort
dataReceived
- я получаю эту ошибку! в чем разница? Я подумал, может быть, я создал обработчик событий не так, поэтому я просто перетащил элемент управления SerialPort
из дизайнера и дважды щелкнул по событию, произошло то же самое.
Я пытался сделать таймер, включить его и в конце функции вызвать его на stop()
, а в полученном сериале установить его на start()
, но все, что я делаю в обработчике SerialPort
, как бы "вне" программы. Не запускает таймер.
code
_dbView.DataSource = dbBind;code
строка. У меня есть полученный обработчик событий, подключенный к COM-порту, и когда я получаю данные на COM-порт, я добавляю/изменяю базу данных в соответствии со строкой, а затем снова вызываю эту функцию. - person Itay   schedule 27.12.2012BackgroundWorker.RunWorkerAsync()
, а из событияRunWorkerCompleted
я вызвал свою функцию, но это не помогло. то же самое произошло здесь... - person Itay   schedule 27.12.2012