Beispiel #1
0
        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();
            }
        }