我有一个DataBound“CheckedListBox”,我需要检查一些项目。我尝试使用以下代码...
if (!string.IsNullOrEmpty(search.Languages))
{
string[] langs = search.Languages.Split(',');
for (int i = 0; i < (langs.Length - 1); i++)
{
for (int j = 0; j < clbLang.Items.Count; j++)
{
string lng = clbLang.Items[j] as string;
if (lng.Trim() == langs[i])
{
clbLang.SetItemChecked(j, true);
break;
}
}
}
}
没有错误,已经执行了“检查”过程,但最终我看不到任何检查。
然后我添加了一个按钮并添加了以下代码。 (点击检查所有项目)
private void button9_Click(object sender, EventArgs e)
{
for (int i = 0; i < clbLang.Items.Count; i++)
{
clbLang.SetItemChecked(i, true);
}
}
“检查”所有项目,请告诉我是否有人可以在这里看到问题...?
答案 0 :(得分:2)
最后发现,这是MS推出的 Bug 。
这里有很好的解释。
这个问题很容易重现。只需隐藏并显示数据绑定 CheckedListBox,你会注意到 以前检查的项目得到 未选中状态。
CheckedListBox SetItemChecked method not working
所以我们必须找到一个解决方法......我尝试了以下方式,它工作得很好......
在我正在调用检查我已添加的项目的地方......我正在添加我需要检查控件的标记。
if (!string.IsNullOrEmpty(search.Languages))
{
clbLang.Tag = search.Languages;
}
然后,在该控件的“VisibleChanged()”事件中执行代码。
private void clbLang_VisibleChanged(object sender, EventArgs e)
{
string lngs = clbLang.Tag as string;
if (!string.IsNullOrEmpty(lngs))
{
string[] langs = lngs.Split(',');
foreach (string lang in langs)
{
int j = 0;
foreach (DataRowView row in clbLang.Items)
{
if (row != null)
{
string lng = row[1] as string;
if (lng.Trim() == lang)
{
clbLang.SetItemChecked(j, true);
break;
}
}
j++;
}
}
}
}
这对我很有用,希望它能让你受益......