Хорошо, новая головоломка! Очень простая проверка концепции: DataGridView
, привязанная через DataTable
к представлению SQL. Данные являются динамическими (хотя число строк является постоянным), поэтому я добавил Forms.Timer
, чтобы обновить его:
private DataTable tbData= new DataTable( );
private void frmMain_Load( object sender, EventArgs e )
{
LoadData( );
oTimer.Start( );
MessageBox.Show( oTimer.Enabled.ToString( ) );
}
private void frmMain_DoubleClick( object sender, EventArgs e )
{
LoadData( ); // to reload on-demand - works perfectly
}
private void LoadData( )
{
SqlDataAdapter da=
new SqlDataAdapter( "select * from vwOne", Program.oSqlConn );
tbData.Clear( );
da.Fill( tbData );
dgView.DataSource= tbData;
}
private void oTimer_Tick( object sender, EventArgs e )
{
LoadData( );
this.Text+= "|";
}
Чтобы сохранить положение прокрутки во время обновлений, я добавил следующие строки (1 и 2):
private void LoadData( )
{
SqlDataAdapter da=
new SqlDataAdapter( "select * from vwOne", Program.oSqlConn );
int iRow= dgView.FirstDisplayedScrollingRowIndex; // 1-remember row
tbData.Clear( );
da.Fill( tbData );
dgView.DataSource= tbData;
dgView.FirstDisplayedScrollingRowIndex= iRow; // 2-restore back
}
Пока все хорошо. Теперь вот кикер: без перезагрузки строки 2 работает отлично (без сохранения прокрутки), но как только я раскомментирую строку 2, таймер просто останавливается (точка останова в oTimer_Tick никогда не срабатывает)!?
Что дает!?
Редактировать: frmMain_DoubleClick(..)
добавлено в код выше (уже было и используется), работает правильно; абсолютно никаких исключений и проблем с подключением SQL . Буквально, раскомментирование этой строки (# 2) имеет значение, наблюдаемое в том, что oTimer_Tick вообще не вызывается!
Следуя предложениям (спасибо, ребята!) Я добавил пару новых строк:
- frmMain_Load (..) показывает oTimer.Enabled и подтверждает его завершение до конца,
- и добавление '|' формировать заголовок формы каждый раз, когда срабатывает oTimer_Tick (..).
Без строки 2 выполнение идет, как и ожидалось: в окне сообщения указано «True», а заголовок продолжает расти с новыми символами «|». Раскомментируйте строку 2 и ... без окна сообщения!?, Без обновления заголовка, но без исключений !? Это запускается непосредственно из VS2010 в режиме отладки, может ли отладчик проглотить какие-либо исключения (я никогда не видел этого)? Считайте, что, поскольку никакое окно сообщения не появляется, это указывает на , проблема в том, чтобы запустить таймер , => это не будет срабатывать Но, как я уже сказал, единственным изменением является раскомментирование строки 2. Как / почему это влияет на таймер!?
Хорошо, следующее, что нужно попробовать, - это избежать повторной компиляции, сделав динамическое переключение (например, с помощью флажка), сохранять ли положение прокрутки или нет, с оставшейся частью визуализации на месте, возможно, это подвергнет что-то явное ..