ProgressBar tdl=new ProgressBar();
                 tdl.Minimum = 0;
                 foreach (DataRow row in dt.Rows)
                {
                    tdl.Value += 1;
                   
                    DataRow newrow = _dgdatas.NewRow();    //定义具有相同结构的新行
                    newrow[0] = row[0];                    //为新行赋值
                    _dgdatas.Rows.Add(newrow);             //将该行添加到行集合中
                }
               
                foreach (DataRow row in _dgdatas.Rows)     //循环行
                {tdl.Value += 1;
                          ....;
                          ....;}我想问一下tdl.Maxmum 该怎么设置,系统默认是100,有时候就被超出,但是也不想胡乱设置个很大的数,感觉太假,谁能告诉我这该怎么写?能让它默认的为循环次数.或者有其他更好的方法.

解决方案 »

  1.   

    tdl.Maxmum = dt.Rows.Count+ _dgdatas.Rows;
      

  2.   

    tdl.Maxmum = dt.Rows.Count + _dgdatas.Rows.Count;
      

  3.   

    但是我上面_dgdatas.Rows.Count是动态的啊,由第一个循环确定的第二个循环的次数.所以没执行循环语句前dt.Rows.Count + _dgdatas.Rows.Count并不是实际的循环次数
      

  4.   

    按你上面的代码来看是:
    tdl.Maxmum = dt.Rows.Count * 2;
      

  5.   

    我觉得LZ可以说清楚你要做什么,
    光看代码确实是mowensky说得就是_dgdatas.Rows.count*2
    或者说你的循环都是 in _dgdatas.Rows的,也都是用_dgdatas.Rows.count做基数的
      

  6.   

    感觉象把之前的数据在COPY一遍,两遍,三遍的感觉,把你的代码贴出来,应该还有更合适的方法
      

  7.   

     private string BindData()
            {
                tsl.Text = "正在生成记录...";
                //tsl.Visible = true;
                sb.Items.Add(tsl);
                //MessageBox.Show("启动");
                sb.Items.Add(tdl);            
                this.panel1.Controls.Add(sb);
                Application.DoEvents();
                tdl.Minimum = 0;           
                tdl.Step = 1;         
                try
                {   _dgdatas.Rows.Clear();  //清除所有行的集合
                    DataTable dt = dac.ExecuteDataSet(String.Format("select distinct yh from YXMSJLB where {0} order by yh", helper.CurWellClause)).Tables[0];
                    tdl.Maximum = dt.Rows.Count*2;
                    //MessageBox.Show(tdl.Maximum.ToString());
                    foreach (DataRow row in dt.Rows)
                    {
                        tdl.Value += 1;
                       
                        DataRow newrow = _dgdatas.NewRow();    //定义具有相同结构的新行
                        newrow[0] = row[0];                    //为新行赋值
                        _dgdatas.Rows.Add(newrow);             //将该行添加到行集合中
                    }
                   
                    foreach (DataRow row in _dgdatas.Rows)     //循环行
                    {
                        //tdl.PerformStep();
                        tdl.Value += 1;
                        dt = dac.ExecuteDataSet(String.Format("SELECT min(qsjs), max(qsjs) from YXMSJLB where {0} and yh = {1}", helper.CurWellClause, row[0])).Tables[0];  //建立连接,执行语句,返回结果
                        row[1] = String.Format("{0}-{1}", dt.Rows[0][0], dt.Rows[0][1]); //将第一行第一列于第二列的元素值之差付给第二行的元素
                    }
                   
                    btnSelect.Enabled = _dgdatas.Rows.Count > 0;  //查询结果不为空时,"选择"按钮可用,否则不可用
                    btnDelete.Enabled = _dgdatas.Rows.Count > 0;  //查询结果不为空时,"删除"按钮可用,否则不可用
                }
                catch (Exception ex)
                {
                    return ex.Message;    //抛出异常
                }
                this.panel1.Controls.Remove(sb);
               
                return null;
            }
      

  8.   

    按照你的代码来看,
    第一,tdl.value的值应该是 _dgdatas.Rows.count*3
    第一次循环完后,tdl.value= _dgdatas.Rows.count,第二次完后就是 _dgdatas.Rows.count*3,第二个循环里面再查询和 _dgdatas没什么关系
    另外,我觉得你的这个可以写到一个SQL里面,