执行“查找和替换”时,数据从大写变为小写
本文关键字:数据 查找 替换 查找和替换 执行 | 更新日期: 2023-09-27 18:29:12
我正在datagridview中开发FIND和REPLACE功能。
以下是经过处理后的结果。
S.No
-----
CODE0001
CODE0002
CODE0003
CODE0004
其中S.No
是列名。
当我找到0001并要求将其替换为1000时,结果是,
S.No
-----
code1000
CODE0002
CODE0003
CODE0004
"查找和替换"功能正在运行,但文本从大写变为小写。
以下是查找和修复的代码:
for (int i = 0; i <= dataGridView1.Rows.Count - 1; i++)
{
if (dataGridView1.Rows[i].Cells[f.cmbColumnCombo.Text].Value.ToString().ToLower().Contains(f.txtfind.Text.ToLower()))
{
dataGridView1.Rows[i].Cells[f.cmbColumnCombo.Text].Value = dataGridView1.Rows[i].Cells[f.cmbColumnCombo.Text].Value.ToString().ToLower().Replace(f.txtfind.Text.ToLower(), f.txtreplace.Text);
bulidDataRow(i);
}
}
在末尾添加.ToUpper();
,替换后:
Value.ToString().ToLower().Replace(f.txtfind.Text.ToLower(), f.txtreplace.Text).ToUpper();
如果希望结果字符串完全大写,则将.ToUpper()添加到结果中。
如果要在字符串中保留大小写,则不能使用"替换"。你需要做这样的事情:
string x = Value.ToString();
string o = f.txtfind.Text.ToLower();
string n = f.txtreplace.Text;
while (x.ToLower().Contains(o))
{
x = x.SubString(0, x.ToLower().IndexOf(o)) + n + x.SubString(x.ToLower().IndexOf(o) + o.Length);
}
问题是使用ToLower
进行不区分大小写的替换。您可以使用Regex.Replace
,这样可以指定RegexOptions.IgnoreCase
。也许是这样的:
var cell = dataGridView1.Rows[i].Cells[f.cmbColumnCombo.Text];
var oldValue = cell.Value.ToString();
cell.Value = Regex.Replace(cell.Value.ToString(), f.cmbColumnCombo.Text, f.txtreplace.Text, RegexOptions.IgnoreCase);
if ((string)cell.Value != oldValue)
bulidDataRow(i);
如果您想要不区分大小写的搜索和替换,我认为最简单的方法是使用正则表达式。
for (int i = 0; i <= dataGridView1.Rows.Count - 1; i++)
{
if (dataGridView1.Rows[i].Cells[f.cmbColumnCombo.Text].Value.ToString()
.ToLower()
.Contains(f.txtfind.Text.ToLower()))
{
string input = dataGridView1.Rows[i].Cells[f.cmbColumnCombo.Text].Value.ToString();
string pattern = f.txtfind.Text.ToLower();
string replacement = f.txtreplace.Text;
string output = Regex.Replace(input, pattern, replacement, RegexOptions.IgnoreCase);
dataGridView1.Rows[i].Cells[f.cmbColumnCombo.Text].Value = output
bulidDataRow(i);
}
}
如果你想要大写的东西,你可以使用:
dataGridView1.Rows[i].Cells[f.cmbColumnCombo.Text].Value = dataGridView1.Rows[i].Cells[f.cmbColumnCombo.Text].Value.ToString().ToUpper().Replace(f.txtfind.Text.ToUpper(), f.txtreplace.Text);