在窗体中有三个文本框,输入后按回车,将输入的内容放在spread中,按钮确定后,将spread内存储的数据一次性插入到数据表中。在这个过程中遇到很奇怪的问题是,spread内的数据有的时候一行一行的全部插入到表中,有的时候则丢掉几行数据,当我单步执行的时候,一行数据都不会少,全部能插入到数据表中。这是哪里的问题呢?

解决方案 »

  1.   

    将文本框的输入数据存入到Spread 中。 (这里Speard中默认有一空行, 第一次将文本框的输入数据填充,第二次添加行并填充数据。第三次添加行并填充数据)   int i = 0;
       int RowCount=this.spdAddData.Sheets[0].Rows.Count;       
                    
       if(this.txtEmpLblCD.Text!="")
       {
         if(bMark)
            {
    this.spdAddData.Sheets[0].Cells[0,0].Text=this.txtConempName.Text ;
    this.spdAddData.Sheets[0].Cells[0,1].Text=this.txtEmployeeCD.Text ;
    this.spdAddData.Sheets[0].Cells[0,2].Text=this.lblEmpName.Text ;
    this.spdAddData.Sheets[0].Cells[0,3].Text=this.txtEmpLblCD.Text;
             ii+=1 ;
             TextClear() ;
    bMark=false;
    }
       else
    {
    this.spdAddData.Sheets[0].AddRows(ii,1);
    this.spdAddData.Sheets[0].Cells[ii,0].Text=this.txtConempName.Text ;
    this.spdAddData.Sheets[0].Cells[ii,1].Text=this.txtEmployeeCD.Text ;
    this.spdAddData.Sheets[0].Cells[ii,2].Text=this.lblEmpName.Text ;
    this.spdAddData.Sheets[0].Cells[ii,3].Text=this.txtEmpLblCD.Text ;
    ii+=1 ;
    TextClear() ;

    }
    将spread中的数据传到表中:
    for(int i=0;i< this.spdAddData.Sheets[0].Rows.Count;i++
    {
       if(this.spdAddData.Sheets[0].Cells[i,0].Text!="")
         { contractname=this.spdAddData.Sheets[0].Cells[i,0].Text;
             employeecd=Convert.ToInt32(this.spdAddData.Sheets[0].Cells[i,1].Text.Trim());
    employeename=this.spdAddData.Sheets[0].Cells[i,2].Text;
    employeelablecode=this.spdAddData.Sheets[0].Cells[i,3].Text;
    if(relation.DeleteJudge(employeelablecode))
             {     relation.DeleteOperate(employeelablecode);   relation.AddOperate(contractname,employeecd,employeename,employeelablecode);
    }
    else 
    {  relation.AddOperate(contractname,employeecd,employeename,employeelablecode)
    }
    问题就,单步执行后,Spread中数据一行一行的都能插入到表中。不是单步执行,总会丢掉一些行,也有时会不丢行。
      

  2.   

    其实看别人的代码,有时真是件挺痛苦的事。感觉你的方法比较繁琐,如果你改成:直接将文本框的数据存入到数据表中,再用spread读取出来。效果应该是一样的。