【发布时间】:2019-02-20 09:19:03
【问题描述】:
我正在使用 dataGridView1_CellFormatting 对我的每一列进行求和。但这使我的 datagridview 滚动速度很慢。特别是当我有大量数据时。
private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
Decimal sum = 0, sum2 = 0, sum3 = 0;
for (int i = 0; i < CustomersGrid.Rows.Count; ++i)
{
sum += Convert.ToDecimal(CustomersGrid.Rows[e.RowIndex].Cells[7].Value);
sum2 += Convert.ToDecimal(CustomersGrid.Rows[e.RowIndex].Cells[6].Value);
sum3 += Convert.ToDecimal(CustomersGrid.Rows[e.RowIndex].Cells[8].Value);
}
Quantitytxt.Text = sum2.ToString() + " ";
Sumtxt.Text = string.Format("{0:0.00}", sum).Replace(",", ".") + "€" + " ";
DiscountSumtxt.Text = string.Format("{0:0.00}", sum3).Replace(",", ".") + "€" + " ";
}
有没有更有效的方法呢?仅当我将获得此单元格时才进行总和的示例?或者是否有任何其他事件或方法?我也试过这个。
private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
Decimal sum = 0, sum2 = 0, sum3 = 0;
for (int i = 0; i < CustomersGrid.Rows.Count; ++i)
{
if (e.ColumnIndex == 7 || e.ColumnIndex == 6 || e.ColumnIndex == 8)
{
sum += Convert.ToDecimal(CustomersGrid.Rows[e.RowIndex].Cells[7].Value);
sum2 += Convert.ToDecimal(CustomersGrid.Rows[e.RowIndex].Cells[6].Value);
sum3 += Convert.ToDecimal(CustomersGrid.Rows[e.RowIndex].Cells[8].Value);
}
}
Quantitytxt.Text = sum2.ToString() + " ";
Sumtxt.Text = string.Format("{0:0.00}", sum).Replace(",", ".") + "€" + " ";
DiscountSumtxt.Text = string.Format("{0:0.00}", sum3).Replace(",", ".") + "€" + " ";
}
它看起来性能好一点,但是当我滚动我的 datagridview 时它仍然很慢。
【问题讨论】:
-
你可以
SumDataSource上的值(*使用类似于 Linq *),然后将其提供给DataGridView。而不是对每个cell进行操作。 -
CellFormatting为每个单元格引发。每次需要格式化单元格内容时,您都在解析整个记录集。甚至没有修改。您可以在 DataSource 填充 DGV 时执行计算,然后在添加/删除行或更改 sensible 单元格的内容时执行计算。初始计数也可以由 SQL 执行。也许,也在之后。
标签: c# .net winforms datagridview