You need to enable JavaScript to run this app. TableLayoutPanel无法显示第10条后新增CTLog记录的问题咨询
优惠活动
大模型
产品
解决方案
定价
更多

TableLayoutPanel无法显示第10条后新增CTLog记录的问题咨询

问题排查与修复方案

核心问题

  • SQL查询未加倒序排序:Access的SELECT TOP 10默认返回符合条件的最早插入的10条记录,而非最新的10条。你新增的记录不在返回结果里,自然不会渲染到界面上,这是你遇到问题的核心原因。
  • 其他潜在问题:
    • 移除控件时未做空值判断:如果对应位置没有控件,GetControlFromPosition会返回null,虽然调用Remove不会触发异常,但属于不严谨的写法
    • 数据库连接未用using管理:手动开闭连接在极端场景下可能出现连接泄漏
    • 若查询结果不足10条,剩余位置会留空,可根据需求补充占位逻辑

修复步骤

  1. 修改SQL语句,新增倒序排序,假设你的timer表有自增主键Id或者记录创建时间CreateTime,修改后SQL如下:
select Top 10 * from timer where ModelLog = @m and ShiftLog = @sl and ShiftStart = @ss and ShiftEnd = @se ORDER BY Id DESC

如果需要按时间最新排序就把ORDER BY Id DESC改成对应时间字段倒序即可。

  1. 优化控件移除逻辑:
for (j = 0; j < 10; j++)
{
    var ctrl1 = tableLayoutPanel1.GetControlFromPosition(j + 1, 0);
    if (ctrl1 != null) tableLayoutPanel1.Controls.Remove(ctrl1);
    var ctrl2 = tableLayoutPanel1.GetControlFromPosition(j + 1, 1);
    if (ctrl2 != null) tableLayoutPanel1.Controls.Remove(ctrl2);
}
  1. (可选)用using包裹数据库连接,替代手动开闭:
    你可以把整个数据库操作放到连接的using块里,无需手动调用Close,using会在作用域结束后自动释放连接:
using (OleDbConnection connection = new OleDbConnection("你的连接字符串"))
{
    connection.Open();
    using (OleDbCommand cmd = new OleDbCommand(sql, connection))
    {
        // 原有参数赋值、查询逻辑
    }
}

修正后完整参考代码

private void RecentCT()
{
    // 移除旧控件,补充空值判断
    for (int j = 0; j < 10; j++)
    {
        var ctrlRow0 = tableLayoutPanel1.GetControlFromPosition(j + 1, 0);
        if (ctrlRow0 != null) tableLayoutPanel1.Controls.Remove(ctrlRow0);
        var ctrlRow1 = tableLayoutPanel1.GetControlFromPosition(j + 1, 1);
        if (ctrlRow1 != null) tableLayoutPanel1.Controls.Remove(ctrlRow1);
    }

    // 新增ORDER BY倒序,取最新10条
    string sql = "select Top 10 * from timer where ModelLog = @m and ShiftLog = @sl and ShiftStart = @ss and ShiftEnd = @se ORDER BY Id DESC";

    // 用using管理连接,自动释放
    using (OleDbConnection connection = new OleDbConnection("你的数据库连接字符串"))
    using (OleDbCommand cmd = new OleDbCommand(sql, connection))
    {
        // 原有参数赋值逻辑保留
        // cmd.Parameters.Add...
        
        try
        {
            connection.Open();
            int i = 0;
            using (var reader = cmd.ExecuteReader())
            {
                while (reader.Read())
                {                           
                    var labelCT = new Label
                    {
                        Text = reader["CTLog"].ToString(),
                        Anchor = AnchorStyles.None,
                        Font = new Font("Microsoft Sans Serif", 10, FontStyle.Regular),
                        TextAlign = ContentAlignment.MiddleCenter
                    };
                    var labelUnit = new Label
                    { 
                        Text = "Unit " + reader["UnitID"].ToString(),
                        Anchor = AnchorStyles.None,
                        Font = new Font("Microsoft Sans Serif", 10, FontStyle.Regular),
                        TextAlign = ContentAlignment.MiddleCenter
                    };
                    tableLayoutPanel1.Controls.Add(labelUnit, i + 1, 0);
                    tableLayoutPanel1.Controls.Add(labelCT, i + 1, 1);
                    i++;
                }
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show("Recent cycle time records cannot be retrieved. Error: " + ex.Message);
        }
    }
}

内容的提问来源于stack exchange,提问作者Jia Soon Loo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 02:45:03