执行“查找和替换”时,数据从大写变为小写

本文关键字:数据 查找 替换 查找和替换 执行 | 更新日期: 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);