From 954cc5918ffe0a04767554ab05e483de92c82ff5 Mon Sep 17 00:00:00 2001 From: Paul Larsen Date: Wed, 29 Jul 2026 12:34:20 -0400 Subject: [PATCH] B2026-053-Find-Unlinked-Values-of-Selected --- .../Volian.Controls.Library/DisplaySearch.cs | 91 +++++++++---------- 1 file changed, 43 insertions(+), 48 deletions(-) diff --git a/PROMS/Volian.Controls.Library/DisplaySearch.cs b/PROMS/Volian.Controls.Library/DisplaySearch.cs index 242be943..ba5e7ce0 100644 --- a/PROMS/Volian.Controls.Library/DisplaySearch.cs +++ b/PROMS/Volian.Controls.Library/DisplaySearch.cs @@ -2017,35 +2017,21 @@ namespace Volian.Controls.Library ReportTitle = string.Format("Search for '{0}'", TextSearchString); // C2020-009: Search - Allow search 'By Word'. - string byWordPrefix = string.Empty; - string byWordSuffix = string.Empty; - if (cbxByWord.Checked) - { - // Generate a prefix & suffix to be used in the sql query around the search string. - // If the search string starts (prefix)/ends(suffix) with a number, then use an expression that - // does not allow the preceding/following text to have a number, '.', letter or other rtf - // commands. If the search string starts/ends with a letter, then use an expression that does not - // find the preceding/following text that is text, i.e. a letter. - if (Regex.IsMatch(TextSearchString, @"^[\d\.]")) // starts with a number or '.' decimal pt - { - byWordPrefix = @"[^0-9a-zA-Z.vbpi:\\-]"; - } - else if (Regex.IsMatch(TextSearchString, @"^[a-zA-Z]")) // starts with a letter - { - byWordPrefix = @"[^a-zA-Z]"; - } - if (Regex.IsMatch(TextSearchString, @"[\d\.]$")) // ends with a number or decimal - { - byWordSuffix = @"[^0-9a-zA-Z.vbpi:\\-]"; - } - else if (Regex.IsMatch(TextSearchString, @"[a-zA-Z]$")) // ends with a letter - { - byWordSuffix = @"[^a-zA-Z]"; - } - } + + //if (cbxByWord.Checked) + //{ + // // Generate a prefix & suffix to be used in the sql query around the search string. + // // If the search string starts (prefix)/ends(suffix) with a number, then use an expression that + // // does not allow the preceding/following text to have a number, '.', letter or other rtf + // // commands. If the search string starts/ends with a letter, then use an expression that does not + // // find the preceding/following text that is text, i.e. a letter. + SearchString = TextSearchString; - // B2022-031 - added a cbxProcSectSrch to filter out procedure and section titles from global search results. - SearchResults = ItemInfoList.GetListFromTextSearch(DVISearchList, TypeSearchList, TextSearchString /*.Replace(@"\",@"\u9586?")*/, cbxBooleanTxtSrch.Checked ? 2 : cbxCaseSensitive.Checked ? 1 : 0, cbxProcSectSrch.Checked ? 1 : 0, cbxIncROTextSrch.Checked ? ItemSearchIncludeLinks.Value : ItemSearchIncludeLinks.Nothing, includeRTFformat, includeSpecialChars, unitPrefix, byWordPrefix, byWordSuffix); + + Dictionary rtnByWord = GetByWordSettings(TextSearchString); + + // B2022-031 - added a cbxProcSectSrch to filter out procedure and section titles from global search results. + SearchResults = ItemInfoList.GetListFromTextSearch(DVISearchList, TypeSearchList, TextSearchString /*.Replace(@"\",@"\u9586?")*/, cbxBooleanTxtSrch.Checked ? 2 : cbxCaseSensitive.Checked ? 1 : 0, cbxProcSectSrch.Checked ? 1 : 0, cbxIncROTextSrch.Checked ? ItemSearchIncludeLinks.Value : ItemSearchIncludeLinks.Nothing, includeRTFformat, includeSpecialChars, unitPrefix, rtnByWord["byWordPrefix"], rtnByWord["byWordSuffix"]); cmbResultsStyleIndex = 3; // display step text in results //} @@ -2078,27 +2064,10 @@ namespace Volian.Controls.Library if (cbxFndUnLnkROVals.Enabled && cbxFndUnLnkROVals.Checked) { - string byWordPrefix = string.Empty; - string byWordSuffix = string.Empty; - if (Regex.IsMatch(ROSearchList, @"^[\d\.]")) // starts with a number or '.' decimal pt - { - byWordPrefix = @"[^0-9a-zA-Z.vbpi:\\-]"; - } - else if (Regex.IsMatch(ROSearchList, @"^[a-zA-Z]")) // starts with a letter - { - byWordPrefix = @"[^a-zA-Z]"; - } - if (Regex.IsMatch(ROSearchList, @"[\d\.]$")) // ends with a number or decimal - { - byWordSuffix = @"[^0-9a-zA-Z.vbpi:\\-]"; - } - else if (Regex.IsMatch(ROSearchList, @"[a-zA-Z]$")) // ends with a letter - { - byWordSuffix = @"[^a-zA-Z]"; - } - - SearchResults = ItemInfoList.GetListFromTextSearch(DVISearchList, TypeSearchList, ROSearchList, cbxBooleanTxtSrch.Checked ? 2 : cbxCaseSensitive.Checked ? 1 : 0, cbxProcSectSrch.Checked ? 1 : 0, ItemSearchIncludeLinks.Nothing, includeRTFformat, includeSpecialChars, unitPrefix, byWordPrefix, byWordSuffix); + Dictionary rtnByWord = GetByWordSettings(ROSearchList); + + SearchResults = ItemInfoList.GetListFromTextSearch(DVISearchList, TypeSearchList, ROSearchList, cbxBooleanTxtSrch.Checked ? 2 : cbxCaseSensitive.Checked ? 1 : 0, cbxProcSectSrch.Checked ? 1 : 0, ItemSearchIncludeLinks.Nothing, includeRTFformat, includeSpecialChars, unitPrefix, rtnByWord["byWordPrefix"], rtnByWord["byWordSuffix"]); cmbResultsStyleIndex = 3; // display step text in results } else @@ -2208,6 +2177,32 @@ namespace Volian.Controls.Library } OnSearchComplete(new DisplaySearchEventArgs(TimeSpan.FromTicks(DateTime.Now.Ticks - start.Ticks))); } + private Dictionary GetByWordSettings(string ss) + { + + Dictionary settings = new Dictionary(); + + string byWordPrefix = string.Empty; + string byWordSuffix = string.Empty; + + if (Regex.IsMatch(ss, @"^[\d\.]")) // starts with a number or '.' decimal pt + { + settings.Add("byWordPrefix", @"[^0-9a-zA-Z.vbpi:\\-]"); + } + else if (Regex.IsMatch(ss, @"^[a-zA-Z]")) // starts with a letter + { + settings.Add("byWordPrefix", @"[^a-zA-Z]"); + } + if (Regex.IsMatch(ss, @"^[\d\.]")) // ends with a number or decimal + { + settings.Add("byWordSuffix", @"[^0-9a-zA-Z.vbpi:\\-]"); + } + else if (Regex.IsMatch(ss, @"[a-zA-Z]$")) // ends with a letter + { + settings.Add("byWordSuffix", @"[^a-zA-Z]"); + } + return settings; + } private void ClearResults() // B2021-103 if no results when RNO only, clear results list. (moved from btnSearch_Click) { if (tabSearchTypes.SelectedTab != tabSearchTypes.Tabs[4])