ListBox设置数据源属性后,数据源和视图的同步更新问题

该死的不好用的控件。

使用它绑定到数据源上:如list<T>,arrayList等数据源。

你对此类数据源的数据进行增加删除时候,Listbox控件显示不会跟数据源同步。

如果是grid控件它就是自动同步的。

此时,如果去调用Listbox.items.add(item),系统会给出“设置数据源后不允许修改数据项”。意思就是不允许调用该方法了。

如此,你要实现上下移动数据项就难了啊。

 

解决方法一:

重新定义一个List,它里面的数赋值原来的。然后再把它关联到Listbox.datasoure。就可以实现同步更新listbox视图了。

list orgin=new list();

list.add(item);

 

list.add(item);

 

list.add(item);

listbox.datasource=orgin.

 

orgin.add(item2);

//此时listbox不会同步更新。

list newDataSource=new list();

list.addrange(orgin);

listbox.datasource=newDatasouse.

//可以实现同步更新。

 

解决方法2:

用bindingsource做中间人。

 

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.Collections;
using MyListControlSample;

namespace WindowsFormsApplication2
{
 public partial class Form3 : Form
 {
  private ArrayList USStates;
  public Form3()
  {
   InitializeComponent();
   USStates = new ArrayList();
   USStates.Add(new USState("Alabama", "AL"));
   USStates.Add(new USState("Washington", "WA"));
   USStates.Add(new USState("West Virginia", "WV"));
   USStates.Add(new USState("Wisconsin", "WI"));
   USStates.Add(new USState("Wyoming", "WY"));
   BindingSource bs = new BindingSource();
   bs.DataSource = USStates;
   this.listBox1.DataSource = bs;
  }

  private void buttonRemove_Click(object sender, EventArgs e)
  {
   USState temp = (USState)this.listBox1.SelectedItem;
   USStates.Remove(temp);
   BindingSource bs = new BindingSource();
   bs.DataSource = USStates;
   this.listBox1.DataSource = bs;
  }

  private void buttonAdd_Click(object sender, EventArgs e)
  {
   USStates.Add(new USState("OuYang", "Viola"));
   BindingSource bs = new BindingSource();
   bs.DataSource = USStates;
   this.listBox1.DataSource = bs;
  }

  private void buttonMoveUp_Click(object sender, EventArgs e)
  {
   int index = this.listBox1.SelectedIndex;
   if (index==0)
   {
    return;
   }
   int up = index - 1;
   USStates[index] = USStates[up];
   USStates[up] = this.listBox1.SelectedItem;
   
   BindingSource bs = new BindingSource();
   bs.DataSource = USStates;
   this.listBox1.DataSource = bs;
   this.listBox1.ClearSelected();
   this.listBox1.SelectedItem = USStates[up];
   
  }
 }
}

 

 

 

 

转载于:https://www.cnblogs.com/363546828/archive/2011/12/19/2293634.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值