快速测试手动输入功能 ====================== ## 5步快速测试 ### 步骤1:启动程序 - 运行程序 - 看到6行数据的表格 ### 步骤2:生成模拟数据 - 点击"模拟数据"按钮 - 吸水时间行会显示数据(试样次数1列) - 吸芯高度行会显示数据(所有3列) ### 步骤3:输入吸芯高度(试样次数1列) - 找到"吸芯高度(mm)"行 - 双击"试样1"下的"1"列(第一列) - 输入:60.50 - 按Enter键 ### 步骤4:输入吸芯高度(试样次数2列) - 找到"吸芯高度(mm)"行 - 双击"试样2"下的"2"列(中间列) - 输入:65.75 - 按Enter键 ### 步骤5:输入吸芯高度(试样次数3列) - 找到"吸芯高度(mm)"行 - 双击"试样3"下的"3"列(第三列) - 输入:70.25 - 按Enter键 ### 步骤6:查看自动计算 - 查看"芯吸速率"行的"试样1、2、3"下的"3"列 - 应该显示计算结果 - 查看"平均芯吸速率"行 - 查看"标准偏差"行 ## 预期结果 ``` ┌─────────────┬────┬────┬────┬────┬────┬────┐ │ 序号 │试样1│试样2│试样3│试样4│试样5│ │ ├─┬─┬─┼─┬─┬─┼─┬─┬─┼─┬─┬─┼─┬─┬─┤ │ │1│2│3│1│2│3│1│2│3│1│2│3│1│2│3│ ├─────────────┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤ │吸水时间(s) │30│ │ │31│ │ │32│ │ │33│ │ │34│ │ │ ├─────────────┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤ │吸芯高度(mm) │60│65│70│60│65│70│60│65│70│60│65│70│60│65│70│ │ │↑│↑│↑│↑│↑│↑│↑│↑│↑│↑│↑│↑│↑│↑│↑│ │ │可│可│可│可│可│可│可│可│可│可│可│可│可│可│可│ │ │编│编│编│编│编│编│编│编│编│编│编│编│编│编│编│ │ │辑│辑│辑│辑│辑│辑│辑│辑│辑│辑│辑│辑│辑│辑│辑│ ├─────────────┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤ │芯吸速率 │ │ │120│ │126│ │131│ │136│ │141│ │(mm/min) │ │ │↑ │ │ │↑ │ │ │↑ │ │ │↑ │ │ │↑ │ │ │ │ │自│ │ │自│ │ │自│ │ │自│ │ │自│ │ │ │ │动│ │ │动│ │ │动│ │ │动│ │ │动│ │ │ │ │计│ │ │计│ │ │计│ │ │计│ │ │计│ │ │ │ │算│ │ │算│ │ │算│ │ │算│ │ │算│ └─────────────┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘ ``` ## 检查点 ✅ 可以双击"吸芯高度"行的试样次数1列 ✅ 可以双击"吸芯高度"行的试样次数2列 ✅ 可以双击"吸芯高度"行的试样次数3列 ✅ 可以输入数字 ✅ 按Enter后数字正确显示 ✅ 芯吸速率自动计算(使用平均吸芯高度) ✅ 平均值自动更新 ✅ 标准偏差自动更新 ✅ 可以继续编辑其他试样 ✅ 隔行变色效果正常 ✅ 其他行不可编辑 ## 如果无法编辑 ### 检查1:是否选对了行 - 必须是"吸芯高度(mm)"行 - 不是其他行(吸水时间、芯吸速率等都不可编辑) ### 检查2:是否双击了 - 需要双击单元格进入编辑模式 - 或者单击后按F2键 ### 检查3:CellBeginEdit事件 - 确认CellBeginEdit事件已注册 - 确认只有吸芯高度行允许编辑 ## 代码检查 如果功能不正常,检查以下代码: ### 1. 列定义 ```csharp // 所有列都应该设置为可编辑 dataGridView1.Columns.Add(new DataGridViewTextBoxColumn { Name = $"试样{i}_1", ReadOnly = false, // ← 必须是false ... }); ``` ### 2. CellBeginEdit事件 ```csharp // 动态控制哪些单元格可以编辑 private void DataGridView1_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e) { if (e.RowIndex >= 0 && e.ColumnIndex > 0) { string rowName = dataGridView1.Rows[e.RowIndex].Cells["序号"].Value?.ToString() ?? ""; // 吸芯高度(mm)行 - 所有列都可以编辑 if (rowName == "吸芯高度(mm)") { return; // 允许编辑 } // 其他行 - 取消编辑 e.Cancel = true; } } ``` ### 3. CellValueChanged事件 ```csharp // 吸芯高度行的任何修改都触发重新计算 private void DataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e) { if (e.RowIndex >= 0 && e.ColumnIndex >= 0) { string rowName = dataGridView1.Rows[e.RowIndex].Cells["序号"].Value?.ToString() ?? ""; if (rowName == "吸芯高度(mm)") { RecalculateRow(e.RowIndex); } } } ``` ## 调试建议 如果遇到问题,可以: 1. 在CellBeginEdit事件中添加断点 2. 检查rowName是否正确识别为"吸芯高度(mm)" 3. 检查e.Cancel是否正确设置 4. 在CellValueChanged事件中添加断点 5. 检查计算逻辑是否正确执行 ## 成功标志 当你看到以下情况时,说明功能正常: 1. ✅ 双击吸芯高度行的任意列后出现光标 2. ✅ 可以输入数字 3. ✅ 按Enter后数字保留 4. ✅ 芯吸速率列显示计算结果 5. ✅ 平均值和标准偏差更新 6. ✅ 其他行无法编辑 7. ✅ 可以导出到Excel 8. ✅ Excel中数据正确显示 ## 重要提示 **新功能**:吸芯高度行的所有3列(试样次数1、2、3)都可以编辑! - 这样可以更灵活地输入数据 - 系统会自动计算平均值用于芯吸速率计算 - 其他行保持只读,不可编辑