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

DataGridView按月筛选后计算列平均值报错,请求技术协助

问题分析与修复方案

核心错误点

  • 固定行索引取值错误:循环里始终取Rows[1],应该用循环变量i遍历每一行
  • 列索引取错:Cells[0]是日期列(Dátum),无法转换为double,要取温度列(索引1)
  • 未处理空行/无效数据:DataGridView默认最后一行是空行,且可能存在单元格值为空或非数字的情况
  • 除零风险:筛选后无数据时,Rows.Count为0会触发除零异常

修复后的代码

public void Zoradanie(string mesiac)
{
    // 清空原有数据,避免累计
    Dt.Rows.Clear();
    
    using (StreamReader sr = new StreamReader(ControlID.TextData))
    {
        CultureInfo culture = new CultureInfo("sk-SK");
        var i = 0;
        while (!sr.EndOfStream)
        {
            string[] rows = sr.ReadLine().Split(',');
            DataRow dr = Dt.NewRow();
            var datum = rows[0].Replace("\"", string.Empty);
          
            if (i >= 2 && datum[0] == mesiac[0] && datum[1] == mesiac[1])
            {                    
                dr["Dátum"] = datum; 
                dr["Teplota FV panelu"] = rows[49];
                Dt.Rows.Add(dr);
           }
             i++;
        }
       
        dataGridView1.DataSource = Dt;
    }
   
    double sum = 0;
    int validRowCount = 0;
    CultureInfo skCulture = new CultureInfo("sk-SK");

    for (int i = 0; i < dataGridView1.Rows.Count; ++i)
    {
        // 跳过最后一行空行(如果允许添加新行)
        if (dataGridView1.Rows[i].IsNewRow)
            continue;

        // 获取温度列的值(索引1)
        var cellValue = dataGridView1.Rows[i].Cells[1].Value;
        if (cellValue != null && double.TryParse(cellValue.ToString(), NumberStyles.Any, skCulture, out double tempValue))
        {
            sum += tempValue;
            validRowCount++;
        }
    }

    // 处理无有效数据的情况
    if (validRowCount == 0)
    {
        label1.Text = "无有效数据计算平均值";
        return;
    }

    double avg = sum / validRowCount;
    string avgString = avg.ToString("N2", skCulture); 
    label1.Text = $"Priemerná teplota: {avgString}";
}

关键修复说明

  1. 清空原有数据:每次筛选前清空Dt的行,避免旧数据干扰新结果
  2. 遍历正确行:用Rows[i]代替固定Rows[1],遍历所有有效行
  3. 切换正确列:使用Cells[1]获取温度列数据,而非日期列
  4. 跳过空行:通过IsNewRow判断并跳过DataGridView的默认空行
  5. 安全转换数值:用double.TryParse结合斯洛伐克文化(sk-SK)处理数值转换,避免格式错误
  6. 处理无数据场景:当没有有效数据时给出提示,避免除零异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 06:24:36