You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET GridView定时事件触发后如何更新指定列并解决图标重复问题

解决方案

核心问题

你在更新图标可见状态时,没有重置其余两个图标的可见属性。ASP.NET Web Forms的视图状态会持久化控件的历史属性值,所以上一次回发中被设为可见的图标会一直保留可见状态,最终出现多个图标叠加的效果。同时你当前在循环中重复调用TimedPanel.Update()是多余操作,无需在每一行处理时都触发面板更新。

修改后的后台代码

直接修改Servers方法,每次处理行时先将三个图标统一设为隐藏,再根据Ping结果仅展示对应图标即可:

private void Servers()
{
    foreach (GridViewRow row in GridView1.Rows)
    {
        if (row.RowType == DataControlRowType.DataRow)
        {
            Image Image3 = (Image)row.FindControl("Image3");
            Image Image4 = (Image)row.FindControl("Image4");
            Image Image5 = (Image)row.FindControl("Image5");
            
            // 先把所有图标重置为隐藏
            Image3.Visible = false;
            Image4.Visible = false;
            Image5.Visible = false;
            
            string destIP = GridView1.DataKeys[row.RowIndex].Value.ToString();
            try
            {
                Ping p = new Ping();
                // 可选:给Ping设置超时时间,避免单个IP超时阻塞整个定时任务
                PingReply reply = p.Send(destIP, 1000);
                if (reply.Status == IPStatus.Success)
                {
                    if (reply.RoundtripTime > 15)
                    {
                        Image5.Visible = true;
                        Image5.ToolTip = $"RoundTripTime: {reply.RoundtripTime}ms";
                    }
                    else
                    {
                        Image3.Visible = true;
                        Image3.ToolTip = $"RoundTripTime: {reply.RoundtripTime}ms";
                    }
                }
                else
                {
                    Image4.Visible = true;
                    Image4.ToolTip = reply.Status.ToString();
                }
            }
            catch (PingException err)
            {
                Image4.ToolTip = err.Message;
                Image4.Visible = true;
            }
        }
    }
    // 所有行处理完成后可以统一调用更新,也可以删掉这行,因为Timer已经配置了触发器会自动刷新面板
    // TimedPanel.Update();
}

可选优化

如果你的服务器列表数量较多,同步Ping会导致整体更新延迟变高,可以考虑改用异步Ping的方式批量执行,进一步提升更新效率。

内容的提问来源于stack exchange,提问作者Allrounder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 07:54:03