0

まだ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;
            }
        }
4

1 に答える 1

3

同じループを2回実行しているため、低速です。これで十分だと思います。

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

実際、100行しかない場合、ループは100 * 100=10000回実行されていました。

于 2012-04-11T10:03:58.390 に答える