user1285872
user1285872

Reputation: 83

c# Items collection cannot be modified when the DataSource property is set

I'm trying to move item up/down a listbox but keep getting an error, not sure how to fix it. the error has something to with "listBox1.Items.Remove(selected);"

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace company1
{
    public partial class Form1 : Form
    {
        List<Configuration> lines = new List<Configuration>();

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            this.listBox1.Items.Clear();
            //Read in every line in the file
            using (StreamReader reader = new StreamReader("file.txt"))
            {
                string line;
                while ((line = reader.ReadLine()) != null)
                {
                    //string textfile = line;
                    string[] myarray = new string[] { "\\n" };
                    string[] parts = new string[9];
                    parts = line.Split(myarray, StringSplitOptions.RemoveEmptyEntries);
                    lines.Add(new Configuration(parts[0], int.Parse(parts[1]), int.Parse(parts[2])));
                    line = reader.ReadLine();
                }

            }
            listBox1.DataSource = lines;
            listBox1.DisplayMember = "CompanyName";
        }

        private void moveup_button_Click(object sender, EventArgs e)
        {
            if (listBox1.SelectedItems.Count > 0)
            {
                object selected = listBox1.SelectedItem;
                int indx = listBox1.Items.IndexOf(selected);
                int totl = listBox1.Items.Count;

                if (indx == 0)
                {
                    listBox1.Items.Remove(selected);
                    listBox1.Items.Insert(totl - 1, selected);
                    listBox1.SetSelected(totl - 1, true);
                }
                else
                {
                    listBox1.Items.Remove(selected);
                    listBox1.Items.Insert(indx - 1, selected);
                    listBox1.SetSelected(indx - 1, true);
                }
            }
        }

        private void movedown_button_Click(object sender, EventArgs e)
        {
            if (listBox1.SelectedItems.Count > 0)
            {
                object selected = listBox1.SelectedItem;
                int indx = listBox1.Items.IndexOf(selected);
                int totl = listBox1.Items.Count;

                if (indx == totl - 1)
                {
                    listBox1.Items.Remove(selected);
                    listBox1.Items.Insert(0, selected);
                    listBox1.SetSelected(0, true);
                }
                else
                {
                    listBox1.Items.Remove(selected);
                    listBox1.Items.Insert(indx + 1, selected);
                    listBox1.SetSelected(indx + 1, true);
                }
            }
        }
    }
}

Upvotes: 2

Views: 9932

Answers (2)

Robin Pathak
Robin Pathak

Reputation: 11

 Conn obcon = new Conn();
 SqlConnection ob = new SqlConnection(obcon.strCon);
 SqlDataAdapter da = new SqlDataAdapter();
 da.SelectCommand = new SqlCommand();
 da.SelectCommand.Connection = ob;
 SqlCommand ds = da.SelectCommand;
 ds.CommandText = "Select* from UserManagement";
 ds.CommandType = CommandType.Text;
 DataTable dt = new DataTable();
 da.Fill(dt);
 DataTable dtt = new DataTable();
 dtt.Columns.Add("FullName");
 dtt.Rows.Add();
 dtt.Rows[0]["FullName"] = "Select Name";
 for (int i = 0; i < dt.Rows.Count; i++)
 {
     dtt.Rows.Add();
     dtt.Rows[i + 1]["FullName"] = dt.Rows[i][0].ToString();
 }
 cmbFindUser.DataSource = dtt;
 cmbFindUser.DisplayMember = "FullName";
 cmbFindUser.ValueMember = "FullName";

Upvotes: 0

user694833
user694833

Reputation:

Use a BindingList object:

  • Create a BindingList using your initial items as data
  • Bind your listbox's data source to that BindingList object
  • Add and remove items from the BindingList, and not from the listbox

Good example at http://msdn.microsoft.com/en-us/library/ms132679.aspx

Upvotes: 5

Related Questions