首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

winform下。一个功能。因为查询和更新大量数据,导致执行这个功能会卡一上

2012-09-03 
winform上。一个功能。因为查询和更新大量数据,导致执行这个功能会卡一下代码大概就是先从数据库中读出大量

winform上。一个功能。因为查询和更新大量数据,导致执行这个功能会卡一下
代码大概就是
先从数据库中读出大量数据。然后更改其中一项。在插入数据库。绑定treeview。怎么使这个不卡。。怎么优化代码

C# code
 private void 复制厂站ToolStripMenuItem_Click(object sender, EventArgs e)        {            //treeView1.SuspendLayout();            Device _device = new Device();//这个是数据库的表的类            TreeNode tn = new TreeNode();            tn.Text = GetString("厂站名称");//这个就是赋值            tn.Tag = "FactoryName";            _factory.FactoryName = tn.Text;            _factory.SetFactory();            DataTable ds = _device.SelectAllNote(treeView1.SelectedNode.Text);//这个是查询数据库并读出大量数据            if(ds .Rows.Count !=0)            {                [color=#FF0000]//下面是把数据逐行插入数据库[/color]                for (int n = 0; n < ds .Rows .Count ; n++)                {                    _device.LockMainType =Convert.ToString(ds.Rows[n][8].ToString());                    _device.VoltageGrade = Convert.ToString(ds.Rows[n][3].ToString());                    _device.Code = Convert.ToString(ds.Rows[n][1].ToString());                    _device.Name = Convert.ToString(ds.Rows[n][2].ToString());                    //VoltageGrade = Convert.ToString(ds.Tables["s"].Rows[0][3].ToString());                    _device.Room = Convert.ToString(ds.Rows[n][4].ToString()) ;                    _device.MasterDevice = Convert.ToString(ds.Rows[n][5].ToString());                    _device.Region = Convert.ToString(ds.Rows[n][6].ToString());                    _device.RelatedLock = Convert.ToString(ds.Rows[n][7].ToString());                    //LockMainType = Convert.ToString(ds.Rows[0][8].ToString());                    _device.Lock = Convert.ToString(ds.Rows[n][9].ToString());                    _device.LockType = Convert.ToString(ds.Rows[n][10].ToString());                    _device.DeviceSort = Convert.ToString(ds.Rows[n][11].ToString());                    _device.DeviceType = Convert.ToString(ds.Rows[n][12].ToString());                    _device.Transmit = Convert.ToString(ds.Rows[n][13].ToString());                    _device.PointNo = Convert.ToString(ds.Rows[n][14].ToString());                    _device.DisplayNo = Convert.ToString(ds.Rows[n][15].ToString());                    _device.MultiPosition = Convert.ToString(ds.Rows[n][16].ToString());                    _device.InitStatus = Convert.ToString(ds.Rows[n][17].ToString());                    _device.Position = Convert.ToString(ds.Rows[n][18].ToString());                    _device.Note = tn.Text;                    _device.SetDeviceCopy();//这个调用数据插入的方法                }            }            _factoryName = tn.Text;            GetNodeT(tn);            treeView1.Nodes.Add(tn);            treeView1.ResumeLayout();        }           }

求高手指点。。怎么做才能使这个功能不显卡

[解决办法]
放到线程中去
[解决办法]
可以做分页吗
[解决办法]
1.展开节点的时候,只加载该节点下一级的子节点,这样可以提高显示速度
2.批量更新数据库肯定没必要,每个节点属性变化了,就用事件实时的去更新数据库,不用遍历所有节点,这样就不卡了
[解决办法]
更改哪个数据库中的项,先只取这项,刚改插入完成后再取出数据,放入treeview中
[解决办法]
审错题了不好意思。动态加载节点。选中某个节点时只加载该节点下的数据。
[解决办法]
如果觉得慢就使用委托
this.Invoke(new Action(() => { /*原代码不动放进来*/}));
这是同步委托,当然也可以改为异步

热点排行