データバウンドチェックリストボックスのプログラムでチェックします
-
09-10-2019 - |
質問
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);
}
}
それは」チェック中「すべてのアイテム、誰かがここで問題を見ることができるかどうか教えてください...?
解決
最後に、それはaです バグ MSによって導入されました。
ここでよく説明されています。
問題は簡単に再現できます。 DataBound CheckedListBoxを非表示にして表示するだけで、以前にチェックされたアイテムがどのようにチェックされているかに気付くでしょう。
CheckedListBox SetItemChecedメソッドが機能していません
だから私たちは回避策を見つけなければなりません...私はフォローウェイを試みました、それはうまく機能しています...
私が呼んでいた場所で チェック中 次のように追加したアイテムの...チェックインする必要があるものを追加しています 鬼ごっこ コントロールの。
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++;
}
}
}
}
これは私とうまく機能します、それがあなたに利益をもたらすことを願っています...
所属していません StackOverflow