你好我有一个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。我尝试过在那里吸食的方法,但它对我不起作用。当我检查我写的字符串的长度时,即使它们是相同的,它们也不匹配。如果你能帮助我,我会很感激。
答案 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);