2016-01-06 42 views
-1

我正在研究datagridview中的FIND和REPLACE功能。查找和替换时数据从大写更改为小写

下面是处理后的结果。

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

其中S.No是列名称。

当我发现0001和要求,以取代1000,结果是,

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

查找和替换功能工作,但是从大写文本改为小写。

下面是查找和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); 
    } 
} 
+1

你可能会被错误地键入Ctrl + U键。请确认。 ctrl + u是用于使文本成为小写字母的键。 –

+2

删除'.ToLower()'无论它出现在哪里 – Graham

回答

0

末添加.ToUpper();,更换后:

Value.ToString().ToLower().Replace(f.txtfind.Text.ToLower(), f.txtreplace.Text).ToUpper(); 
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); 
} 
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); 
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);