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

如何在交互式网格中实现基于均值与标准差的上下限批量/逐行计算?

交互式网格上下限计算实现方案

需求说明

  • 计算规则:
    • 下限(low):(均值 - 标准差) * 2
    • 上限(high):(均值 + 标准差) * 2
  • 触发方式:
    1. 点击「计算上下限」按钮,批量遍历网格所有行完成计算
    2. 每行输入均值和标准差后,自动计算该行的上下限

一、按钮触发批量计算实现(修复原代码公式问题)

原C#代码存在公式错误(原代码直接用均值 - 标准差*2,不符合需求的(均值-标准差)*2),以下是修正后的实现:

private void btnsdi_Click(object sender, EventArgs e)
{
    for (int i = 0; i < dgvResult.Rows.Count; i++)
    {
        // 跳过空行或均值/标准差为空的行
        if (dgvResult.Rows[i].Cells[4].Value == null || dgvResult.Rows[i].Cells[5].Value == null)
            continue;

        if (decimal.TryParse(dgvResult.Rows[i].Cells[4].Value.ToString(), out decimal mean) 
            && decimal.TryParse(dgvResult.Rows[i].Cells[5].Value.ToString(), out decimal sd))
        {
            // 按正确公式计算上下限
            dgvResult.Rows[i].Cells[6].Value = (mean - sd) * 2;
            dgvResult.Rows[i].Cells[7].Value = (mean + sd) * 2;
        }
    }
}

代码优化点说明

  • 替换String.IsNullOrEmpty为null判断+decimal.TryParse,避免格式转换异常
  • 修正计算逻辑,严格匹配需求公式
  • 跳过无效行(空值、格式错误),提升稳定性

二、单行输入自动计算实现

通过网格的单元格值变化事件(如CellValueChanged),监听均值或标准差单元格的输入,实时计算当前行的上下限:

private void dgvResult_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
    // 仅监听均值(索引4)或标准差(索引5)列的变化
    if (e.ColumnIndex != 4 && e.ColumnIndex != 5)
        return;

    int rowIndex = e.RowIndex;
    // 跳过表头行
    if (rowIndex < 0 || rowIndex >= dgvResult.Rows.Count)
        return;

    var row = dgvResult.Rows[rowIndex];
    // 检查均值和标准差单元格是否有有效值
    if (row.Cells[4].Value == null || row.Cells[5].Value == null)
        return;

    if (decimal.TryParse(row.Cells[4].Value.ToString(), out decimal mean) 
        && decimal.TryParse(row.Cells[5].Value.ToString(), out decimal sd))
    {
        // 实时计算并赋值上下限
        row.Cells[6].Value = (mean - sd) * 2;
        row.Cells[7].Value = (mean + sd) * 2;
    }
    else
    {
        // 若输入格式错误,清空上下限
        row.Cells[6].Value = null;
        row.Cells[7].Value = null;
    }
}

注意事项

  • 确保网格的CellValueChanged事件已绑定到上述方法
  • 若使用编辑控件(如TextBox)嵌入单元格,可能需要监听编辑控件的TextChanged事件来触发计算
  • 可根据实际网格控件的类型(如DevExpress、Telerik等)调整事件名称和单元格访问方式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 15:07:31