问题描述
我在主窗体里有一个datagridview,里面完全空白。我在线程里读取SQL数据放在datagridview里面,然后想在这个线程里面对datagridview进行编辑。但是不知道如何读取内容,出错提示是“索引超出范围。必须为非负值并小于集合大小。”我读取的是第一列数据,我在另外一个线程里面是可以读取的。但在取数据线程读取就失败。应该是委托的问题。我用委托操作datagridview添加列是没问题的。但是不知道如何读取上面的数据。方法一PublicDelegateSubDelegate_get_Market(ByValtextAsStringPrivateSubGet_market(ByValvalue1AsString)DimabcAsString=form1.DataGridView1.Item(value1,0).ValueEndSubmyclass1.Invoke(NewDelegate_get_Market(AddressOfGet_market),"market")
这个方法没反应。方法二DimabcAsString=form1.DataGridView1.Item("Market",0).Value
解决方案
解决方案二:
是不是要当前线程结束了datagridview才真正有数据呢?所以从同一个线程就不能读取数据,线程结束后就没问题?
解决方案三:
该回复于2014-01-21 06:08:13被版主删除
解决方案四:
应该datagridview里没有数据,没有数据就会有这个提示
解决方案五:
http://www.vbforums.com/showthread.php?498387-Accessing-Controls-from-Worker-Threads*****************************************************************************签名档:http://feiyun0112.cnblogs.com/
解决方案六:
引用4楼feiyun0112的回复:
http://www.vbforums.com/showthread.php?498387-Accessing-Controls-from-Worker-Threads*****************************************************************************签名档:http://feiyun0112.cnblogs.com/
不是很明白?能解析下吗?
解决方案七:
线程操作的关键代码,先将数据保存到全局的DataTable,然后一条条往dataGridView1添加#regionbackgroundWorker将XML导入GridViewprivatevoidbackgroundWorker1_DoWork(objectsender,DoWorkEventArgse){object[]argumet=(object[])e.Argument;int_rowIndex=int.Parse(argumet[0].ToString());backgroundWorker1.ReportProgress(_rowIndex);}privatevoidbackgroundWorker1_ProgressChanged(objectsender,ProgressChangedEventArgse){dataGridView1.Rows.Add(newobject[]{Properties.Resources.PROCESS_READY,e.ProgressPercentage+1,_dt_am.Rows[e.ProgressPercentage]["Code"],_form_code,""});}privatevoidbackgroundWorker1_RunWorkerCompleted(objectsender,RunWorkerCompletedEventArgse){_index=_index+1;if(_index<_dt_am.Rows.Count){if(_isPlay&&!_isStop){_form_code=_form_code.Substring(0,10)+(int.Parse(_form_code.Substring(10,3))+1).ToString("D3");backgroundWorker1.RunWorkerAsync(newobject[]{_index});}}else{bnt_star.Enabled=true;bnt_pause.Enabled=false;bnt_stop.Enabled=false;bnt_update.Enabled=true;mTB_Code.Enabled=true;}if(_isStop){_index=0;_updateIndex=0;}//如果强制关闭if(_isClose){this.Close();}}#endregion