我有一个 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;
}
}
}
}
没有错误,调试执行正在进行中”checking“过程,但最终我看不到任何检查的内容。
然后我添加了一个按钮并向其添加了以下代码。 (单击后检查所有项目)
private void button9_Click(object sender, EventArgs e)
{
for (int i = 0; i < clbLang.Items.Count; i++)
{
clbLang.SetItemChecked(i, true);
}
}
It is "checking“所有项目,请告诉我是否有人可以看到这里的问题......?
终于发现,这是一个Bug由MS介绍。
这里解释得很好。
这个问题很容易重现。只需隐藏和显示数据绑定
CheckedListBox,你会注意到如何
之前检查的项目得到
未经检查。
CheckedListBox SetItemChecked 方法不起作用 http://groups.google.com/group/microsoft.public.dotnet.framework.windowsforms/msg/6e1ad9489333572f?hl=en
所以我们必须找到一个解决方法...我尝试了以下方法,效果很好...
在我打电话的地方checking我已添加以下项目...我正在添加我需要签入的内容Tag的控制。
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++;
}
}
}
}
这对我来说效果很好,希望对你有用......
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)