c#设置DataSource属性时,无法修改项集合

时间:2012-05-01 15:17:02

标签: c# .net visual-studio-2010

我正在尝试将项目向上/向下移动到列表框但是不断收到错误,不知道如何修复它。该错误与“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);
                }
            }
        }
    }
}

2 个答案:

答案 0 :(得分:5)

使用BindingList对象:

  • 使用您的初始项目作为数据创建BindingList
  • 将列表框的数据源绑定到该BindingList对象
  • 在BindingList中添加和删除项目,而不是从列表框中添加和删除项目

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

的好例子

答案 1 :(得分:0)

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