我正在使用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);
}
}
答案 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);