I guess I was on the right track. Here's the code that makes it work. BindingSource _mainBS; string _fieldname; TARData.TARDataSet.DataRow[] _mRA; string _searchstring; int _currentPosition; _mainBS is assigned by a constructor, likewise _fieldname. public void FindNext() { if (_searchstring != textBox1.Text) { _searchstring = textBox1.Text; _currentPosition = 0; string searchCrit = getColumnSearchString(((DataRowView)_mainBS.Current).DataView.Table.Columns[_fieldname].DataType); _mRA = (TARData.TARDataSet.Carter_TAR_MainRow[])((DataRowView)_mainBS.Current).DataView.Table.Select( searchCrit + " LIKE '%" + _searchstring + "%'"); } if (_mRA.Length > 0) { this._mainBS.Position = this._mainBS.Find("Main_ID", _mRA[_currentPosition]["Main_ID"]); ; } _currentPosition = (_currentPosition + 1) % _mRA.Length; } Just in case _fieldname is an int type, I throw in this little tidbit to perform a convert. private string getColumnSearchString(Type type) { if (type == typeof(int)) return "Convert(" + _fieldname + ",System.String)"; else return _fieldname; } Not too efficient, but I still like admiring it. Not a bad way to spend an hour of my day.