围绕这个问题有很多问题,但没有一个能解决我的问题。我有一个SQL服务器数据库作为数据源,一个输入文本框和一个搜索按钮。输入文本并按下搜索按钮后,将显示包含搜索文本的行的下拉列表。用户选择他们想要查看的行,并且该信息显示在网格视图中。 (已退回1行)
我希望突出显示搜索到的文本。这就是我所拥有的,它应该有效,但我无法弄清楚它为什么没有:
foreach (GridViewRow row in searchTextGridView2.Rows)
{
string text = searchText_txt.Text; //Text that was entered in the search text field
int length = searchTextGridView2.Columns.Count; //Number of Columns on the grid
for (int i = 0; i < length; i++) //loop through each column
{
string newText = row.Cells[i].Text.ToString(); //Get the text in the cell
if (newText.Contains(text)) //If the cell text contains the search text then do this
{
string highlight = "<span style='background-color:yellow'>" + text + "</span>";
string replacedText = Regex.Replace(newText, text, highlight, RegexOptions.IgnoreCase);
row.Cells[i].Text = replacedText;
}
}
}
以上代码位于事件内,因为下拉选定项目已更改。 如果我搜索&#34;声明&#34;,它会突出显示该单词的所有实例,但是如果我搜索&#34;声明&#34;,它只突出显示带有大写字母的单词&#34; C&#34; 。任何帮助表示赞赏
答案 0 :(得分:4)
您的问题不是来自Replace()
方法 - 它是Contains()
方法。
每当您在字符串上调用Contains()
时,它都会执行case-sensitive
比较,以便以下行始终返回false
:
"Some Claims".Contains("claims");
为了克服这个问题,你应该使用String.IndexOf(String, Int32)
方法:
for (int i = 0; i < length; i++)
{
string newText = row.Cells[i].Text.ToString();
if (newText.IndexOf(text, StringComparison.CurrentCultureIgnoreCase) >= 0
{
string highlight = "<span style='background-color:yellow'>$0</span>";
string replacedText = Regex.Replace(newText, text, highlight, RegexOptions.IgnoreCase);
row.Cells[i].Text = replacedText;
}
}