private void _applyButton_Click ( object sender, EventArgs e ) { AuthorInfo ethalon = _propertyGrid.SelectedObject as AuthorInfo; if (ReferenceEquals(ethalon, null)) { WriteLine("Не задан эталон"); return; } string familyName = ethalon.FamilyName; if (string.IsNullOrEmpty(familyName)) { WriteLine("Эталон пуст"); return; } TermData[] terms = _termDataBindingSource.DataSource as TermData[]; if (ArrayUtility.IsNullOrEmpty(terms)) { WriteLine("Нет записей для коррекции"); return; } string[] selectedTerms = terms .Where(term => term.Selected) .Select(term => term.Text) .ToArray(); if (ArrayUtility.IsNullOrEmpty(selectedTerms)) { WriteLine("Нет записей для коррекции"); return; } StringBuilder query = new StringBuilder(); bool first = true; foreach (string term in selectedTerms) { if (!first) { query.Append(" + "); } query.AppendFormat ( "\"{0}{1}\"", Prefix, term ); first = false; } try { Provider = GetProvider(); Controller.Run ( () => { int[] found = Provider.Search(query.ToString()); WriteLine ( "Отобрано для коррекции: {0}", found.Length ); foreach (int mfn in found) { MarcRecord record = Provider.ReadRecord(mfn); if (!ReferenceEquals(record, null)) { AuthorInfo[] authors = AuthorInfo.ParseRecord ( record, AuthorInfo.AllKnownTags ); AuthorInfo[] selected = authors.Where ( a => a.FamilyName .SameString(familyName) ) .ToArray(); if (selected.Length == 0) { WriteLine ( "MFN {0} пропущен", mfn ); } else { foreach (AuthorInfo theAuthor in selected) { WriteLine ( "MFN {0}: {1}", mfn, theAuthor.Field ); ethalon.ApplyToField ( theAuthor.Field .ThrowIfNull("theAuthor.Field") ); } Provider.WriteRecord(record); } } } } ); } finally { ReleaseProvider(); } _keyBox_ButtonClick(sender, e); WriteLine("Обработка завершена"); }
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(); } }