请教listbox绑定数据源的问题

yunhaiC QQ654777694 2014-08-09 10:40:25
如果ListBox的数据源DataSource的类型是List<String>.


((List<string>)mllb.DataSource)[index] = "Test";

那用这样的方法去更新数据好像没有效果,

就必须用下面的方法:
List<string> dataSource = (List<string>)mllb.DataSource;
dataSource[index] = "Test";
mllb.DataSource = null;
mllb.DataSource = dataSource;

但是数据重新对mllb对象的ListBox进行DataSource整体赋值,那么当dataSouce对象数据很庞大的时候,如果只是修改其中一个item,那界面就会卡一下。

如何解决DataSource绑定数据源的情况下,更新数据又不卡
...全文
222 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
smthgdin_020 2014-08-10
  • 打赏
  • 举报
回复
修改的时候,不用每次修改都去update数据库,之后再重新获取和绑定。 比如说你绑定的是dataset的内容,那么修改dataset就行,update数据库的操作异步处理。
dlx_2632641148 2014-08-10
  • 打赏
  • 举报
回复
listbox绑定数据源DataSource显示数据库数据 namespace AddToListBox { public partial class Frm_Main : Form { public Frm_Main() { InitializeComponent(); } private void btn_Add_Click(object sender, EventArgs e) { try { string P_Connection = string.Format(//创建数据库连接字符串 "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb;User Id=Admin"); OleDbConnection P_OLEDBConnection = //创建连接对象 new OleDbConnection(P_Connection); P_OLEDBConnection.Open();//连接到数据库 OleDbCommand P_OLEDBCommand = new OleDbCommand(//创建命令对象 "select * from [message]", P_OLEDBConnection); OleDbDataReader P_Reader = //得到数据读取器 P_OLEDBCommand.ExecuteReader(); while (P_Reader.Read())//读取数据 { lb_Str.Items.Add(P_Reader[0]);//将数据放入集合 }//CodeGo.net/ MessageBox.Show("成功读取数据!", "提示!"); } catch (Exception ex) { MessageBox.Show("数据读取失败!\r\n"+ex.Message,"错误!"); } } } }
涵树_fx 2014-08-10
  • 打赏
  • 举报
回复
那么,
引用 4 楼 yunhaiC 的回复:
[quote=引用 3 楼 firefox1 的回复:] 我这里没有大数据,所以不一定能够重现你的问题。但你可以在你的环境下面试一下 我的解决方法关键是使用CurrencyManager 数据初始化

private void Form1_Load(object sender, EventArgs e)
        {
           List<string> s = new List<string>() { 
                "a",
                "b"
            };
            listBox1.DataSource = s;         
        }
通过点击事件来修改数据

private void button1_Click(object sender, EventArgs e)
        {
           var list = listBox1.DataSource as List<string>;

            list[0] = "a1"; //修改数据
            ((CurrencyManager)this.BindingContext[listBox1.DataSource]).Refresh();//通过CurrencyManager将数据刷新到界面上
        }
试了效果,一样的,没什么明显变化,还是有点卡[/quote] 那么,你试试下面的代码呢? 数据初始化

private void Form1_Load(object sender, EventArgs e)
        {
           List<string> s = new List<string>() { 
                "a",
                "b"
            };
            listBox1.DataSource = s;         
        }
点击事件更新代码

        private void button1_Click(object sender, EventArgs e)
        {
            this.BeginInvoke(new Action(() =>
            {
                var list = listBox1.DataSource as List<string>;

                list[0] = "a1";
                ((CurrencyManager)this.BindingContext[listBox1.DataSource]).Refresh();
            }));
        }
  • 打赏
  • 举报
回复
能否举个例子,谢谢
  • 打赏
  • 举报
回复
使用 多线程。
  • 打赏
  • 举报
回复
引用 3 楼 firefox1 的回复:
我这里没有大数据,所以不一定能够重现你的问题。但你可以在你的环境下面试一下 我的解决方法关键是使用CurrencyManager 数据初始化

private void Form1_Load(object sender, EventArgs e)
        {
           List<string> s = new List<string>() { 
                "a",
                "b"
            };
            listBox1.DataSource = s;         
        }
通过点击事件来修改数据

private void button1_Click(object sender, EventArgs e)
        {
           var list = listBox1.DataSource as List<string>;

            list[0] = "a1"; //修改数据
            ((CurrencyManager)this.BindingContext[listBox1.DataSource]).Refresh();//通过CurrencyManager将数据刷新到界面上
        }
试了效果,一样的,没什么明显变化,还是有点卡
涵树_fx 2014-08-09
  • 打赏
  • 举报
回复
我这里没有大数据,所以不一定能够重现你的问题。但你可以在你的环境下面试一下 我的解决方法关键是使用CurrencyManager 数据初始化

private void Form1_Load(object sender, EventArgs e)
        {
           List<string> s = new List<string>() { 
                "a",
                "b"
            };
            listBox1.DataSource = s;         
        }
通过点击事件来修改数据

private void button1_Click(object sender, EventArgs e)
        {
           var list = listBox1.DataSource as List<string>;

            list[0] = "a1"; //修改数据
            ((CurrencyManager)this.BindingContext[listBox1.DataSource]).Refresh();//通过CurrencyManager将数据刷新到界面上
        }

111,125

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧