2011-01-11 67 views
1

我有一个DataBound“CheckedListBox”,我需要检查它的一些项目。我试着用下面的代码...编程检查DataBound CheckListBox

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

没有错误,debuged执行正在经历“检查”的过程,但最后我看不到任何东西就可以了检查。

然后我添加了一个按钮并添加了以下代码。 (后,即可查看所有项目

private void button9_Click(object sender, EventArgs e) 
    { 
     for (int i = 0; i < clbLang.Items.Count; i++) 
     { 
      clbLang.SetItemChecked(i, true); 
     } 
    } 

这是“检查”中的所有项目,请告诉我,如果任何人都可以在这里看到一个问题...?

+0

您_need_命名您的按钮。 – SLaks 2011-01-11 04:02:11

+1

哎唷!请使用`foreach(langs中的字符串lang)`而不是`for(int i = 0; i <(langs.Length - 1); i ++)`。 – 2011-01-11 04:03:03

回答

2

最后发现了,这是一个错误通过 MS引入。

这里有很好的解释。

的问题是容易重现。只是隐藏和显示数据绑定 CheckedListBox,你会发现 先前检查的项目是如何获得 选中。

CheckedListBox SetItemChecked method not working

因此,我们必须找到一个解决办法......我试过follwing方式,这是工作不错...

在那里我打电话检查项目的的地方,我已添加以下内容...我正在添加我需要检查的标记的控件。

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

这跟我工作得很好,希望这将有利于你...