【问题标题】:background worker and progress bar implementation for additional column in datagridview?datagridview 中附加列的后台工作人员和进度条实现?
【发布时间】:2012-04-11 09:46:48
【问题描述】:

对于 C# 来说仍然相对较新,我试图了解适合我的应用程序的后台工作人员和进度条,以下代码显示我正在向 datagridview 添加一个新列,然后填充新列的所有单元格零(0)。为此实现后台工作人员和进度条的最佳方法是什么。 整个过程大约需要 15 秒,因此需要一个进度条来向用户显示正在发生的事情。

新增和填充新列的代码如下:

//Creates new column in the datagridview
        DataGridViewColumn newCol = new DataGridViewColumn();
        newCol.CellTemplate = new DataGridViewTextBoxCell();
        newCol.HeaderText = tbAddSupp.Text.ToUpper();
        newCol.Name = tbAddSupp.Text.ToUpper();
        newCol.Visible = true;
        dgvStock.Columns.Add(newCol);

        cbSuppList.Items.Clear();
        cbSuppList2.Items.Clear();

        //Adds the default 0 value to all the cells in the new column
        //ITS TOO SLOW THOUGH....!!!!!
        int cellVal = 0;
        foreach (DataGridViewRow row in dgvStock.Rows)
        {
            for (int r = 0; r < dgvStock.Rows.Count - 1; r++)
            {
                dgvStock.Rows[r].Cells[newCol.Name.ToString()].Value = cellVal;
            }
        }

【问题讨论】:

  • 我认为你问错了问题。 “如何使这个(出现)更快”将是正确的问题......

标签: c# visual-studio-2010 datagridview progress-bar backgroundworker


【解决方案1】:

这很慢,因为您要执行两次相同的循环。我觉得这就够了:

int cellVal = 0;
foreach (DataGridViewRow row in dgvStock.Rows)
{
    row.Cells[newCol.Name.ToString()].Value = cellVal;
}

事实上,如果您只有 100 行,您的循环将运行 100 * 100 = 10000 次!

【讨论】:

  • 到目前为止,我的 datagridview 包含 4220,所以现在我知道为什么花了这么长时间,感谢您指出这一点,它现在可以立即工作,不需要 bgw 或进度条。非常感谢。
猜你喜欢
  • 1970-01-01
  • 2012-06-11
  • 1970-01-01
  • 1970-01-01
  • 2013-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多