zoukankan      html  css  js  c++  java
  • 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];
       
      }
     }
    }

  • 相关阅读:
    .NET基础知识之七——索引器
    安装Sql Server 2008的时候报错说找不到某个安装文件
    安装Sql Server 2008时出错
    英文操作系统奇怪的问题
    装虚拟机后一部分磁盘空间消失
    服务器允许两台电脑远程登录一个账户
    Linq工具篇(1)——使用LinqPad
    ExtJs工具篇(1)——在Aptana3中安装ExtJS 代码提示插件
    SQL基础(三)-- SQL根据”,“分割字符串
    SQL基础(四)-- SQL连接时去掉重复数据
  • 原文地址:https://www.cnblogs.com/363546828/p/2293634.html
Copyright © 2011-2022 走看看