当前位置:编程学习 > C#/ASP.NET >>

C# 将excel数据导入到DataGridView里 并显示进度

--------------------编程问答-------------------- 没有人吗?
帮帮忙啊 --------------------编程问答-------------------- 超过2000条数据显示很慢的,建议:
1 多线程
2 分页显示 --------------------编程问答--------------------
引用 2 楼 zdbb 的回复:
超过2000条数据显示很慢的,建议:
1 多线程
2 分页显示


不可以做分页

多线程怎么做呢 可以给我讲解下嘛  详细点  谢谢 --------------------编程问答-------------------- 先学学线程吧,线程更新界面,等等; --------------------编程问答--------------------
引用 4 楼 lianshaohua 的回复:
先学学线程吧,线程更新界面,等等;

现在急用啊  指点下  谢谢 --------------------编程问答-------------------- 多线程和 select count(*) from $sheet ====》条数 然后用进度条控件。

还有 Excel 最大条数只有 255 列 ,65535行 --------------------编程问答--------------------
引用 6 楼 qiaohuyue 的回复:
多线程和 select count(*) from $sheet ====》条数 然后用进度条控件。

还有 Excel 最大条数只有 255 列 ,65535行

我这边不会超过这个的

可以讲下具体方法吗?
我不太懂   谢谢 --------------------编程问答-------------------- 试试用SQL插入,然后再显示到界面中 --------------------编程问答-------------------- 可以考虑用委托加异步实现! --------------------编程问答--------------------
引用 8 楼 a01589 的回复:
试试用SQL插入,然后再显示到界面中

有人跟我说过先插入到sql中,然后再加载到datagridview上面
但是我不会弄啊   指点下  谢谢 --------------------编程问答--------------------
引用 9 楼 wangyineng 的回复:
可以考虑用委托加异步实现!

详细点 或者有没有什么例子  你这样直接说我不明白
谢谢 --------------------编程问答-------------------- 有人没 说清楚点呗  谢谢 --------------------编程问答--------------------
引用 10 楼 bjhfei 的回复:
引用 8 楼 a01589 的回复:试试用SQL插入,然后再显示到界面中
有人跟我说过先插入到sql中,然后再加载到datagridview上面
但是我不会弄啊   指点下  谢谢


就是直接在SQL Server里面使用这句查询:
insert into 表名(列名,要和Excel对应)
select (Excel中的列名)  
from  openrowset ('Microsoft.JET.OLEDB.4.0','Excel 8.0;HDR=YES;IMEX=1;Database=Excel路径',[sheet1$])
插入数据库之后,在DataGridView里面怎么显示,相信你应该没问题吧 --------------------编程问答--------------------
引用 13 楼 a01589 的回复:
引用 10 楼 bjhfei 的回复:引用 8 楼 a01589 的回复:试试用SQL插入,然后再显示到界面中
有人跟我说过先插入到sql中,然后再加载到datagridview上面
但是我不会弄啊   指点下  谢谢

就是直接在SQL Server里面使用这句查询:
insert into 表名(列名,要和Excel对应)
select (Excel中的列……

把数据库里面的内容查询出来,再绑定到DataGridView上? --------------------编程问答-------------------- 用多线程做,你可以把数据先读到内存中,然后从内存绑定数据,进度条用invoke方法进行多线程操作 --------------------编程问答--------------------
引用 15 楼 tao526598085 的回复:
用多线程做,你可以把数据先读到内存中,然后从内存绑定数据,进度条用invoke方法进行多线程操作

给个例子  或者把代码写下吧  我没用过线程  谢谢 --------------------编程问答--------------------
引用 14 楼 bjhfei 的回复:
引用 13 楼 a01589 的回复:引用 10 楼 bjhfei 的回复:引用 8 楼 a01589 的回复:试试用SQL插入,然后再显示到界面中
有人跟我说过先插入到sql中,然后再加载到datagridview上面
但是我不会弄啊   指点下  谢谢

就是直接在SQL Server里面使用这句查询:
insert into 表名(列名,要和Excel对应……


是的,前阵子我做了一个Excel导入的,BS架构的,就是这么整 --------------------编程问答--------------------
引用 17 楼 a01589 的回复:
引用 14 楼 bjhfei 的回复:引用 13 楼 a01589 的回复:引用 10 楼 bjhfei 的回复:引用 8 楼 a01589 的回复:试试用SQL插入,然后再显示到界面中
有人跟我说过先插入到sql中,然后再加载到datagridview上面
但是我不会弄啊   指点下  谢谢

就是直接在SQL Server里面使用这句查询:
insert i……

用DataSource直接绑定的话挺慢的 至少我这是挺慢的 2000条要2分钟  原因不详
还有就是  我想要进度条显示进度  所以datasource显示不了啊 --------------------编程问答-------------------- 使用诈术!先绑定一个空表,数据读取完成再绑定数据表
用多线程读数据中委托界面显示数量,读万条的数据也不过几秒时间.
关于委托 --------------------编程问答-------------------- 读5千条内数据几秒 --------------------编程问答--------------------
引用 20 楼 xianfajushi 的回复:
读5千条内数据几秒

你这个只是读excel啊
我最关键的是需要绑定到datagridview上
如果直接用datasource绑定很慢的 --------------------编程问答-------------------- 先读到内存里 然后 一条条的加
通过委托 将读出来的数据加到页面 --------------------编程问答-------------------- 如果是绑定那就更快了不到2秒完成2千多条数据,private void 读取设定(string 文件名, bool 加载条件) --------------------编程问答--------------------
引用 22 楼 luochanghua 的回复:
先读到内存里 然后 一条条的加
通过委托 将读出来的数据加到页面

一条一条加相当慢 --------------------编程问答--------------------
        private void 浏览Excel文件()
        {
            处理结果.Columns.Clear(); 
            OpenFileDialog 打开文件 = new OpenFileDialog();
            打开文件.Filter = "Excel表格文件(xls)|*.xls;|所有文件(*.*)|*.*";
            if (打开文件.ShowDialog() == DialogResult.OK) 读取表格数据 = 读取微软表格文件(打开文件.FileName);
            else 加载空结果标题();
            读取.Join(); this.Text = "[金刚般若]字符分类提取:" + 打开文件.FileName;
            //DataRow 插入行 = 读取表格数据.Tables[0].NewRow(); 读取表格数据.Tables[0].Rows.InsertAt(插入行, 0);
            if (读取表格数据.Tables.Count > 0) 处理结果.DataSource = 读取表格数据.Tables[0];
            if (读取表格数据.Tables.Count > 0) MessageBox.Show("打开文件完成!" + 读取表格数据.Tables[0].Rows.Count.ToString() + "行数据。", "友情提示!");
        }
除非你的内存不够否则2千多条不到2秒完成. --------------------编程问答-------------------- 读数据的操作放到一个新线程里做。读完数据后就调用委托绑定数据。。
进度条的显示放在DataGridView的RowAdded事件里做呗。
--------------------编程问答--------------------
引用 26 楼 lye2000000_super 的回复:
读数据的操作放到一个新线程里做。读完数据后就调用委托绑定数据。。
进度条的显示放在DataGridView的RowAdded事件里做呗。


我原本就是用
for循环 DataGridView.RowAdd()做的   不过速度太慢了   我也不知道为啥这么慢   --------------------编程问答--------------------
引用 27 楼 bjhfei 的回复:
引用 26 楼 lye2000000_super 的回复:读数据的操作放到一个新线程里做。读完数据后就调用委托绑定数据。。
进度条的显示放在DataGridView的RowAdded事件里做呗。

我原本就是用
for循环 DataGridView.RowAdd()做的   不过速度太慢了   我也不知道为啥这么慢


不用for循环。绑定datasource就行。 --------------------编程问答--------------------
引用 25 楼 xianfajushi 的回复:
C# code?123456789101112        private void 浏览Excel文件()        {            处理结果.Columns.Clear();             OpenFileDialog 打开文件 = new OpenFileDialog();            打开文件.Filter = "Excel表格……


我就是先把excel数据放到一个DataTable里面,然后DataGridView.DataSource=DataTable 
2000条要两三分钟,5000条要五六分钟    --------------------编程问答-------------------- 那应该查其他原因了,我写的运行无数次都很快. --------------------编程问答--------------------
引用 30 楼 xianfajushi 的回复:
那应该查其他原因了,我写的运行无数次都很快.


我也不懂  然后后面的for循环液很慢  额   相当慢 --------------------编程问答-------------------- 我有一个软件不是直接绑定的,因为还要做字符处理才会慢些,速度也不定,有时就快,看电脑运行其他程序多少和占用内存情况.
还有就是看哪个方法占用时间多了就优化. --------------------编程问答-------------------- 我也想学习! --------------------编程问答--------------------
引用 32 楼 xianfajushi 的回复:
我有一个软件不是直接绑定的,因为还要做字符处理才会慢些,速度也不定,有时就快,看电脑运行其他程序多少和占用内存情况.
还有就是看哪个方法占用时间多了就优化.


加载数据的时候没有其他动作啊,很奇怪的 --------------------编程问答-------------------- 我也来学习试试 --------------------编程问答-------------------- 以xls做为数据源,
然后在绑定,
不会慢的吧 --------------------编程问答-------------------- 看你这样没头没脑的叫人瞎猜也不是办法,自己先判断看在哪花费时间多再到这里提问. --------------------编程问答-------------------- 肯定不会这么慢的,我2K条数据2秒钟左右的事情就可以显示到dgv中了
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,