1

私は 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);
        }
    }

すべてのアイテムを「チェック」しています。誰かここで問題が見られるかどうか教えてください...?

4

1 に答える 1

2

最終的に判明したのは、MS によって導入されたバグです。

ここでよく説明されています。

この問題は簡単に再現できます。データバインドされた CheckedListBox を非表示にして表示するだけで、以前にチェックされたアイテムがどのようにチェックされていないかがわかります。

CheckedListBox SetItemChecked メソッドが機能しない

したがって、回避策を見つける必要があります...次の方法を試しましたが、うまく機能しています...

私が追加した項目のチェックを呼び出していた場所で...コントロールのタグでチェックする必要があるものを追加しています。

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

これは私とうまく機能します。それがあなたに役立つことを願っています...

于 2011-01-11T05:08:05.753 に答える