gpt4 book ai didi

c# - CellFormatting 事件导致 .NET 4.5 应用程序呈现不稳定

转载 作者:太空宇宙 更新时间:2023-11-03 10:58:39 28 4
gpt4 key购买 nike

在一个简单的 .NET WinForm 中,我有一个 datagridview,它根据单元格的值进行着色。代码正在运行,但呈现的形式“摇摇欲坠”(当计算机不断不得不重新绘制并且无法跟上时的样子)。我想知道我是否可以做些什么来消除这种情况,或者我的代码是否有问题。不胜感激。

private void gvPhoneQueue_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
try
{
if (gvPhoneQueue.Columns[e.ColumnIndex].HeaderText == "CallsWaiting")
{
string convertedVal = e.Value.ToString();
if (Convert.ToInt32(convertedVal) > _greenTolerance)
{
gvPhoneQueue.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.Green;
}

if (Convert.ToInt32(convertedVal) > _yellowTolerance)
{
gvPhoneQueue.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.Yellow;
}

if (Convert.ToInt32(convertedVal) > _redTolerance)
{
gvPhoneQueue.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.Red;
}
}
}
catch (System.Exception ex)
{
LogEvent("Error" _+ ex);
}
}

最佳答案

我已经看到一些关于 DataGridView 在这种情况下的性能问题的线程(使用 CellFormattingCellPainting,...)。这可能是一个“已知问题”在处理大量数据时

可以肯定的是,您应该避免在CellFormating 事件中做过于复杂的事情。我没有看到您的代码有什么问题,但它似乎没有优化:

  • 您使用了 3 次 Convert.ToInt32(convertedVal) :您应该存储值而不是转换字符串值的 3 倍。如果您使用的是 Try Cath block ,由于可能存在转换错误,您可以改用 int32.TryParse方法。

  • 我猜颜色不能同时是红色、黄色或绿色,_redTolerence 是最高值?所以您应该先测试最高值,然后再测试其他值,然后所以尽快退出该方法,如果不需要,不要每次都评估 3 个 if 语句。在 VB.Net 中,我建议使用 ElseIf 语句 ,但它在 C# 中不存在 。在这种情况下使用 return 是一样的。 [编辑我的错误是 C# 中的 else if 等于 VB.Net 中的 ElseIf]。


可能的优化:

private void gvPhoneQueue_CellFormatting(object sender, System.Windows.Forms.DataGridViewCellFormattingEventArgs e)
{
if (gvPhoneQueue.Columns(e.ColumnIndex).HeaderText == "CallsWaiting") {
int convertVal = 0;
if (int.TryParse(e.Value.ToString, convertVal)) {
if (convertVal > _redTolerance) {
gvPhoneQueue.Rows(e.RowIndex).DefaultCellStyle.BackColor = Color.Red;
} else if (convertVal > _yellowTolerance) {
gvPhoneQueue.Rows(e.RowIndex).DefaultCellStyle.BackColor = Color.Yellow;
} else if (convertVal > _greenTolerance) {
gvPhoneQueue.Rows(e.RowIndex).DefaultCellStyle.BackColor = Color.Green;
}
} else {
//can't convert e.value
}
}
}

关于c# - CellFormatting 事件导致 .NET 4.5 应用程序呈现不稳定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18518037/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com