C#线程内部操作datagridview 使数据重新加载实现向上跑动!!!

问题描述

///<summary>///启动**按钮///</summary>///<paramname="sender"></param>///<paramname="e"></param>privatevoidbutton18_Click(objectsender,EventArgse){if(IsThreadRun==false){Start_ThreadMount();}}privatevoidStart_ThreadMount(){IsThreadRun=true;if((userControl71.StatusValue1==3)&&(userControl81.StatusValue2==1)){Thread_Thread=newThread(newThreadStart(StartTP));_Thread.IsBackground=true;_Thread.Start();}}privatevoidStartTP(){OnTrueNext+=newExcelIncreaseEventHandle(Form_main_OnTrueNext);ExcelIncrease();}voidForm_main_OnTrueNext(){//datagridview表向上移动一行if(ADD_c<=(10000-(AppStatus.MyStruct_Grid.Grid_Count-1))){ADD_c=10000;}else{ADD_c=ADD_c-1;}LoadExcel();//this.dataGridView1.Refresh();}///<summary>///读取Excel数据到DataGridView///</summary>privatevoidLoadExcel(){try{//清空dataGridView1所有行dataGridView1.Rows.Clear();//设置显示数据的表名dataGridView1.DataMember="[Sheet1$]";DataTable_DataTable=null;if(SourceFile!=null){//执行Read方法,返回DataTable,通过选择文件读取数据_DataTable=ExcelAX.Read(SourceFile);}else{MessageBox.Show("请检查SourceFile是否为空","Tips",MessageBoxButtons.OK,MessageBoxIcon.Exclamation);}//显示DataTablefor(inta=0;a<(_DataTable.Rows.Count-1);a++){//当a=0的时候就是第9999行开始写入datagridview。Index_datagridview=a+(ADD_c-1);if(a==0){//添加ADD_c个行前面空了ADD_c行。dataGridView1.Rows.Add(ADD_c);//dataGridView1.Rows.Add();dataGridView1.Rows[Index_datagridview].Cells[0].Value=(a+1).ToString();dataGridView1.Rows[Index_datagridview].Cells[0].Style.BackColor=Color.FromArgb(234,234,234);dataGridView1.Rows[Index_datagridview].Cells[1].Value=_DataTable.Rows[a+1][1];dataGridView1.Rows[Index_datagridview].Cells[2].Value=_DataTable.Rows[a+1][2];dataGridView1.Rows[Index_datagridview].Cells[3].Value=_DataTable.Rows[a+1][3];dataGridView1.Rows[Index_datagridview].Cells[4].Value=_DataTable.Rows[a+1][4];dataGridView1.Rows[Index_datagridview].Cells[5].Value=_DataTable.Rows[a+1][5];dataGridView1.Rows[Index_datagridview].Cells[6].Value=_DataTable.Rows[a+1][6];dataGridView1.Rows[Index_datagridview].Cells[7].Value=_DataTable.Rows[a+1][7];dataGridView1.Rows[Index_datagridview].Cells[8].Value=_DataTable.Rows[a+1][8];dataGridView1.Rows[Index_datagridview].Cells[9].Value=_DataTable.Rows[a+1][9];dataGridView1.Rows[Index_datagridview].Cells[10].Value=_DataTable.Rows[a+1][10];dataGridView1.Rows[Index_datagridview].Cells[11].Value=_DataTable.Rows[a+1][11];dataGridView1.Rows[Index_datagridview].Cells[12].Value=_DataTable.Rows[a+1][12];}else{dataGridView1.Rows.Add(1);//a行的序号列dataGridView1.Rows[Index_datagridview].Cells[0].Value=(a+1).ToString();dataGridView1.Rows[Index_datagridview].Cells[0].Style.BackColor=Color.FromArgb(234,234,234);dataGridView1.Rows[Index_datagridview].Cells[1].Value=_DataTable.Rows[a+1][1];dataGridView1.Rows[Index_datagridview].Cells[2].Value=_DataTable.Rows[a+1][2];dataGridView1.Rows[Index_datagridview].Cells[3].Value=_DataTable.Rows[a+1][3];dataGridView1.Rows[Index_datagridview].Cells[4].Value=_DataTable.Rows[a+1][4];dataGridView1.Rows[Index_datagridview].Cells[5].Value=_DataTable.Rows[a+1][5];dataGridView1.Rows[Index_datagridview].Cells[6].Value=_DataTable.Rows[a+1][6];dataGridView1.Rows[Index_datagridview].Cells[7].Value=_DataTable.Rows[a+1][7];dataGridView1.Rows[Index_datagridview].Cells[8].Value=_DataTable.Rows[a+1][8];dataGridView1.Rows[Index_datagridview].Cells[9].Value=_DataTable.Rows[a+1][9];dataGridView1.Rows[Index_datagridview].Cells[10].Value=_DataTable.Rows[a+1][10];dataGridView1.Rows[Index_datagridview].Cells[11].Value=_DataTable.Rows[a+1][11];dataGridView1.Rows[Index_datagridview].Cells[12].Value=_DataTable.Rows[a+1][12];}}//设置此行背景dataGridView1.Rows[9999].DefaultCellStyle.BackColor=Color.Blue;//设置此行前色dataGridView1.Rows[9999].DefaultCellStyle.ForeColor=Color.Red;//设置scroll的位置dataGridView1.FirstDisplayedScrollingRowIndex=(9996);}catch(ExceptionERR){MessageBox.Show(ERR.ToString());return;}}为什么会出现下面的错误呢

解决方案

解决方案二:
publiceventExcelIncreaseEventHandleOnTrueNext;protectedvoidExcelIncrease(){OnTrueNext();}publicdelegatevoidExcelIncreaseEventHandle();
解决方案三:
add改为Insert即可。
解决方案四:
把数据处理想得太复杂了,建议在后台处理好要绑定的DataSet,使用虚拟模式加载,效果要好很多.

时间: 2024-09-15 09:23:29

C#线程内部操作datagridview 使数据重新加载实现向上跑动!!!的相关文章

EF如何操作内存中的数据以及加载相关联表的数据:延迟加载、贪婪加载、显示加载

原文:EF如何操作内存中的数据以及加载相关联表的数据:延迟加载.贪婪加载.显示加载 之前的EF Code First系列讲了那么多如何配置实体和数据库表的关系,显然配置只是辅助,使用EF操作数据库才是每天开发中都需要用的,这个系列讲讲如何使用EF操作数据库.老版本的EF主要是通过ObjectContext来操作数据库的,一看是Object打头的,自然相当庞大,方法也比较多.到了经典的4.1版本,EF小组推出了一些更简单好用的API,就是DbContext,它包括更常用的方法.看看EF小组是怎么说

Android实现基于滑动的SQLite数据分页加载技术(附demo源码下载)_Android

本文实例讲述了Android实现基于滑动的SQLite数据分页加载技术.分享给大家供大家参考,具体如下: main.xml如下: <menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/action_settings" android:orderInCategory="100" android:showAs

一个小改进,解决Redis数据在线加载大痛点

作者介绍 顾伟涛,曾任职于百度.奇虎360,现为杭州铭师堂教育资深DBA,擅长数据库监控.备份.高可用架构设计和自动化运维,对Redis和MongoDB方面有深入研究,关注分布式存储.大数据存储.消息队列.搜索引擎等后端技术.   前言   在使用Redis加载数据过程中存在一个问题,就是必须要重启Redis服务,如果是Redis主从复制架构,这样加载数据,是一件很麻烦的事情,笔者根据Redis启动时加载数据的思想,对Redis进行了改进,实现了在线加载数据,在这里和大家一起探讨下.   设计与

WinForm ListView 大数据提高加载速度的方法 虚拟模式加载

将VirtualMode 属性设置为 true 会将 ListView 置于虚拟模式.控件不再使用Collection.Add()这种方式来添加数据,取而代之的是使用RetrieveVirtualItem(Occurs when the ListView is in virtual mode and requires a ListViewItem.)和CacheVirtualItems两个事件,单独使用RetrieveVirtualItem也可以,CacheVirtualItems这个事件主要是

Android实现基于滑动的SQLite数据分页加载技术(附demo源码下载)

本文实例讲述了Android实现基于滑动的SQLite数据分页加载技术.分享给大家供大家参考,具体如下: main.xml如下: <menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/action_settings" android:orderInCategory="100" android:showAs

Js表格万条数据瞬间加载实现代码

 一条数据创建一行,如果数量大的时候,一次性要加载完数据的话,浏览器就会卡上半天,下面有个不错的方法,大家可以参考下 Js表格,万条数据瞬间加载    在Ajax动态加载数据的实际应用中,大家都习惯了一种思维方式:一条数据创建一行.  于是如果数量大的时候,一次性要加载完数据的话,浏览器就会卡上半天    受Flex的DataGrid控件的启发,在Flex的DataGrid控件中,展示数据的方法并不是有多少条数据就创建多少行,它最多只创建你在界面上所看到的十几二十行(假设为n行),如果数据多的话

本机搭建tomcat服务器 架设网站 局域网内用户访问 页面动态加载的数据无法加载

问题描述 本机搭建tomcat服务器 架设网站 局域网内用户访问 页面动态加载的数据无法加载 本机搭建的tomcat服务器,数据库.局域网内用户访问系统页面,ajax动态加载数据无法显示.如图: [用户类型]是ajax动态加载的!本机页面正常,局域网内用户只有页面,没数据! 解决方案 你的代码呢?用chrome开发工具或者firebug看看报错了没有,ajax返回了什么内容. 解决方案二: 浏览器log中有没有错误,ajax打印下返回结果

安卓frgment-Frgment切换到另一个Frgement 在返回 数据重写加载 怎么让他只加载一次!

问题描述 Frgment切换到另一个Frgement 在返回 数据重写加载 怎么让他只加载一次! Frgment切换到另一个Frgement 在返回 数据重写加载 怎么让他只加载一次! 解决方案 frgment 加载数据 解决方案二: 加上一个全局变量判断下

ios-IOS&amp;amp;amp;Android开发:如何从大量未加载的数据中加载一定量的数据到列表中

问题描述 IOS&Android开发:如何从大量未加载的数据中加载一定量的数据到列表中 绝大多数新闻资讯类应用开发过程中都会遇到这么一个问题: 规定每次从服务器最多只能获取20条数据,第一次刷新获取了20条最新的数据,添加到列表中,过一段时间有了30条未刷新的记录,这下问题来了:第二次刷新时是获取最新的20条还是接着第一次获取之后的20条数据放在列表前面?前者会导致列表中间空缺一部分数据,后者问题是要多刷新几次才能把所有数据获取到. 有过相关开发经验的大神们来说说你们的解决方案. 解决方案 刷新