private void _termGrid_CellContentClick ( object sender, DataGridViewCellEventArgs e ) { DataGridView grid = sender as DataGridView; if (ReferenceEquals(grid, null)) { return; } if (e.ColumnIndex < 0 || e.ColumnIndex >= grid.ColumnCount || e.RowIndex < 0 || e.RowIndex >= grid.RowCount) { return; } DataGridViewButtonColumn column = grid.Columns[e.ColumnIndex] as DataGridViewButtonColumn; if (ReferenceEquals(column, null)) { return; } if (ReferenceEquals(grid.CurrentRow, null)) { return; } TermData term = grid.CurrentRow.DataBoundItem as TermData; if (ReferenceEquals(term, null)) { return; } string text = term.Text; if (string.IsNullOrEmpty(text)) { return; } string familyName = AuthorInfo.ExtractFamilyName(text); if (string.IsNullOrEmpty(familyName)) { return; } _propertyGrid.SelectedObject = null; string query = Prefix + text; try { Provider = GetProvider(); AuthorInfo theAuthor = null; Controller.Run ( () => { TermLink[] links = Provider.ExactSearchLinks(query); if (links.Length != 0) { int mfn = links[0].Mfn; MarcRecord record = Provider.ReadRecord(mfn); if (!ReferenceEquals(record, null)) { AuthorInfo[] authors = AuthorInfo.ParseRecord ( record, AuthorInfo.AllKnownTags ); theAuthor = authors.FirstOrDefault ( a => a.FamilyName .SameString(familyName) ); } } } ); _propertyGrid.SelectedObject = theAuthor; term.Ethalon = true; _propertyGrid.Invalidate(); WriteLine ( "Задан эталон: {0}", theAuthor.Field ); } finally { ReleaseProvider(); } }