在查找和替换时,数据从大写更改为小写

时间:2016-01-06 10:25:06

标签: c#

我正在使用datagridview中的FIND和REPLACE功能。

以下是处理后的结果。

S.No
-----
CODE0001
CODE0002
CODE0003
CODE0004

S.No是列名。

当我找到0001并要求用1000替换它时,结果是,

S.No
-----
code1000
CODE0002
CODE0003
CODE0004

查找和替换功能正在运行,但大写的文本正在更改为LOWERCASE。

以下是Find and Repalce的代码:

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);
    }
}

4 个答案:

答案 0 :(得分:0)

在替换后添加.ToUpper();

Value.ToString().ToLower().Replace(f.txtfind.Text.ToLower(), f.txtreplace.Text).ToUpper();

答案 1 :(得分:0)

如果希望结果字符串完全为大写,则将.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);
}

答案 2 :(得分:0)

问题是使用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);

答案 3 :(得分:0)

如果你想要一个不区分大小写的搜索和替换,我认为最简单的方法是使用正则表达式。

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);