如何解决CellFormatting
“慢速滚动”性能问题?
使用此代码将解密值从加密列复制到另一列:
private void grid_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
if (e.ColumnIndex < 0 || e.RowIndex < 0)
return;
var columnB = grid.Columns[e.ColumnIndex];
if (columnB.Name != "B")
return;
var value = grid.Rows[e.RowIndex].Cells["A"].Value;
if (value == null || value == DBNull.Value)
return;
e.Value = Decrypt(value.ToString());
}
如果性能问题是由于Decrypt
方法引起的,则应避免CellFormatting
在事件文档的备注部分中提及的情况下使用它:
该
CellFormatting
事件在每次绘制每个单元格时发生,因此在处理此事件时应避免冗长的处理。
我可以使用哪种解决方案根据第一列为第二列提供价值?
您可以使用以下任一选项:
DataGridView
并在for循环中提供该值。DataTable
),并在for循环中提供该值。例子
在下面的示例中,如果从数据库加载数据,则没有任何区别。但是为了提供一个最小的,完整的可验证示例,我创建了DataTable
自己。在这两个示例LoadData
方法中,均加载DataTable
:
private DataTable LoadData()
{
var dt = new DataTable();
dt.Columns.Add("ExistingColumn");
dt.Rows.Add("x");
dt.Rows.Add("y");
dt.Rows.Add("z");
return dt;
}
示例1-将列添加到DataGridView
var dt = LoadData();
dataGridView1.DataSource = dt;
//Add new column to DataGridView
var newColumn = new DataGridViewTextBoxColumn();
newColumn.HeaderText = "NewColumn";
newColumn.Name = "NewColumn";
dataGridView1.Columns.Add(newColumn);
//Copy Values
foreach (DataGridViewRow r in this.dataGridView1.Rows)
{
if(!r.IsNewRow)
r.Cells["NewColumn"].Value = Decrypt(r.Cells["ExistingColumn"].Value.ToString());
}
示例2-将列添加到DataTable
var dt = LoadData();
dataGridView1.DataSource = dt;
//Add new column to DataTable
dt.Columns.Add("NewColumn");
//Copy Values
foreach (DataRow r in dt.Rows)
r["NewColumn"] = Decrypt(r.Field<string>("ExistingColumn");
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句