-3

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

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

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

不能将与货币经理职位相关联的行设为隐形异常

您可以在此处看到:无法将数据网格视图的行设置为可见错误。我尝试了那里建议的方法,但它对我不起作用。此外,当我检查我写的字符串的长度时,即使它们相同,它们也不匹配。如果你能帮助我,我很感激。

4

1 回答 1

3

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

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

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

您可以在不使用 if 语句的情况下将 Visible 属性的设置简化为:

item.Visible = item.Cells[2].Value.ToString().Contains(textBox1.Text,
                             StringComparer.CurrentCultureIgnoreCase);
于 2018-03-09T13:26:50.237 回答