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,有时候就被超出,但是也不想胡乱设置个很大的数,感觉太假,谁能告诉我这该怎么写?能让它默认的为循环次数.或者有其他更好的方法.
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,有时候就被超出,但是也不想胡乱设置个很大的数,感觉太假,谁能告诉我这该怎么写?能让它默认的为循环次数.或者有其他更好的方法.
tdl.Maxmum = dt.Rows.Count * 2;
光看代码确实是mowensky说得就是_dgdatas.Rows.count*2
或者说你的循环都是 in _dgdatas.Rows的,也都是用_dgdatas.Rows.count做基数的
{
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;
}
第一,tdl.value的值应该是 _dgdatas.Rows.count*3
第一次循环完后,tdl.value= _dgdatas.Rows.count,第二次完后就是 _dgdatas.Rows.count*3,第二个循环里面再查询和 _dgdatas没什么关系
另外,我觉得你的这个可以写到一个SQL里面,