即使相同的字符串也不匹配

时间:2018-03-09 13:11:47

标签: c# .net datagridview datagridviewrow

你好我有一个datagridview,它有list的数据源,这个列表是:

public class UniqueNounWithFreq
{
    public int freq { get; set; }
    public string word { get; set; }

    public UniqueNounWithFreq(string word, int freq)
    {
        this.freq = freq;
        this.word = word;
    }
}



if (e.KeyChar == (char)13)
{
    foreach (DataGridViewRow item in dataGridView_w2wm2.Rows)
    {
        if (!item.Cells[2].Value.ToString().Contains(textBox1.ToString().ToLower()))
        {
            item.Visible = false;
        }
        else
        {
            item.Visible = true;
        }
    }
}

当我想用按键隐藏一行时,它会抛出

  

与货币经理的头寸相关联的行不能成为不可见的异常

您可以在此处看到:Unable To set row visible false of a datagridview。我尝试过在那里吸食的方法,但它对我不起作用。当我检查我写的字符串的长度时,即使它们是相同的,它们也不匹配。如果你能帮助我,我会很感激。

1 个答案:

答案 0 :(得分:3)

使用textBox1.ToString()将生成类似“System.Windows.Controls.TextBox:TextBox”的内容 - 它将创建一个控件类型的字符串。

您应该使用textBox1.Text来获取文本框的实际内容 - 它是一个字符串,因此不需要转换。

继PeterBruins发表评论后,使用.Contains(textBox1.Text,StringComparer.CurrentCultureIgnoreCase)会比转换为小写更好。

您可以简化设置Visible属性而不使用if语句:

item.Visible = item.Cells[2].Value.ToString().Contains(textBox1.Text,
                             StringComparer.CurrentCultureIgnoreCase);