Sitter fast och kan inte komma på hur jag skall lösa mitt problem. Du kan inte pilla på en collection som du itererar över. Här itererar du ju över checkedListBox1.CheckedItems, vilket är ett subset av checkedListBox1.Items. Hej Tomas.Remove från checkedListBox1
Jag laddar min checkedListBox1 ifrån en Access-databas.
Jag vill kunna ta bort de ikryssade itemen. Att ta bort det från databasen är lätt, men inte att samtidigt ta bort det ifrån checkedListBox1.
<code>
DialogResult svar = MessageBox.Show("Du är på väg att radera dessa resultat. Vill du fortsätta?", "Varning", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning);
if (svar == DialogResult.OK)
{
string Selectedvalue = "";
foreach (DataRowView objDataRowView in checkedListBox1.CheckedItems)
{
int id = Convert.ToInt32(objDataRowView["id"].ToString());
delId(id);
checkedListBox1.Items.RemoveAt(this.checkedListBox1.SelectedIndex);//här smäller det
}
lCount.Text = Selectedvalue;
}
</code>
Error:
Items collection cannot be modified when the DataSource property is set.
Vad göra?Sv: Remove från checkedListBox1
Ett sätt att lösa det på är att slänga in alla objekt som ska tas bort i en temporär collection som du sedan kan iterera över:
T.ex (ej provkört men principen torde funka):
var itemsToRemove = new List<DataRowView>();
foreach (DataRowView objDataRowView in checkedListBox1.CheckedItems)
{
int id = Convert.ToInt32(objDataRowView["id"].ToString());
delId(id);
//checkedListBox1.Items.RemoveAt(this.checkedListBox1.SelectedIndex);//här smäller det
itemsToRemove.Add(objDataRowView);
}
foreach(var obj in itemsToRemove)
{
checkedListBox1.Items.Remove(obj);
}
Sv:Remove från checkedListBox1
Jo jag upptäckte det men jag kom på att det gick väldigt smidigt att bara ladda om listboxen, så fungerade det väldigt bra.
Jag blev emellertid väldigt besviken på checkedListbox då den inte tog bort posterna som jag ville. Jag har nu ersatt det med en listbox, multiselected, och nu fungerar den biten kanon.
Tack i alla fall.