// Updates list of available datasources (tables, views, stored procs) // for connection string specified by _cbDataProvider, _cbConnectionString // selects specified recordSource if possible private void ConnectionStringChanged( string recordSource) { // store current value of connection string to prevent update when // _cbConnectionString lost focus _oldConnectionString = _cbConnectionString.Text; BeginUpdate(); Cursor = Cursors.WaitCursor; try { DsgnDataLinkBase dl = ((DataProviderDesc)_cbDataProvider.SelectedItem).Link; _tvDataSource.Nodes.Clear(); if (!string.IsNullOrEmpty(_cbConnectionString.Text) && dl.Available) { if (dl.UpdateControls(this, recordSource)) { // current connection string should be stored in MRU list int i = IndexOfConnectionDesc(dl, _cbConnectionString.Text); if (i >= 0) { ConnectionDesc ci = (ConnectionDesc)_cbConnectionString.Items[i]; _cbConnectionString.Items.Remove(ci); _cbConnectionString.Items.Insert(0, ci); _cbConnectionString.SelectedIndex = 0; } else { if (_cbConnectionString.Items.Count > c_MaxMRUSize) { _cbConnectionString.Items.RemoveAt(_cbConnectionString.Items.Count - 1); } _cbConnectionString.Items.Add(new ConnectionDesc(dl, _cbConnectionString.Text)); } // save MRU connections to application's settings // SaveList uses ToString() method of objects in list so we can // simple pass _cbConnectionString.Items items will be automatically converted to string like: // OLEDB;Data source=... List <string> l = new List <string>(); foreach (ConnectionDesc cd in _cbConnectionString.Items) { l.Add(cd.ToSettingsString()); } AppSettings.SaveList("recentconnections", l, true, MessageForm.Warn); } } UpdateButtons(); } finally { Cursor = Cursors.Default; EndUpdate(); } }
private int IndexOfConnectionDesc( DsgnDataLinkBase dataLink, string connectionString) { for (int i = 0; i < _cbConnectionString.Items.Count; i++) { ConnectionDesc cd = (ConnectionDesc)_cbConnectionString.Items[i]; if (cd.Link == dataLink && cd.ConnectionString == connectionString) { return(i); } } return(-1); }