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

尝试更新列表时无法访问List字段,求技术解决方案

问题分析与解决

核心问题

你代码里的listevDetail是调用.ToList()后得到的List集合对象,并非单个EvidenceDetail实例,所以直接访问.EvidenceId这类字段会报错——List本身没有这些实体属性。

分场景修正方案

场景1:更新数据库查询到的现有记录

如果你的需求是把DataGrid里的行数据对应更新到查询出来的每条记录中,需要遍历集合里的单个实体:

var listevDetail = db.EvidenceDetail
                     .Get(p => p.EvidenceId == _EvidenceId)
                     .ToList();

// 取集合和DataGrid行的最小数量,避免索引越界
var loopCount = Math.Min(listevDetail.Count, dgEvidence.RowCount - 1);
for (int i = 0; i < loopCount; i++)
{
    // 取出集合里的单个实体对象
    var evDetail = listevDetail[i];
    // 以下EvidenceId查询时已满足,可省略
    // evDetail.EvidenceId = _EvidenceId;
    evDetail.MerchandiseName = dgEvidence.Rows[i].Cells["Merchandise"].Value.ToString();
    
    // 建议用TryParse避免非数字值导致崩溃
    if(double.TryParse(dgEvidence.Rows[i].Cells["Weight"].Value.ToString(), out double weight))
    {
        evDetail.weight = weight;
    }
    
    evDetail.Unit = dgEvidence.Rows[i].Cells["Unit"].Value.ToString();
    evDetail.Description = dgEvidence.Rows[i].Cells["Description"].Value?.ToString();

    db.EvidenceDetail.Update(evDetail);
}
// 统一保存,减少数据库交互次数
db.Save();

场景2:新增DataGrid行对应的记录

如果是要把DataGrid里的行数据作为新记录插入数据库,无需先查询集合,直接创建新实体:

for (int i = 0; i < dgEvidence.RowCount - 1; i++)
{
    var newEvDetail = new EvidenceDetail();
    newEvDetail.EvidenceId = _EvidenceId;
    newEvDetail.MerchandiseName = dgEvidence.Rows[i].Cells["Merchandise"].Value.ToString();
    
    if(double.TryParse(dgEvidence.Rows[i].Cells["Weight"].Value.ToString(), out double weight))
    {
        newEvDetail.weight = weight;
    }
    
    newEvDetail.Unit = dgEvidence.Rows[i].Cells["Unit"].Value.ToString();
    newEvDetail.Description = dgEvidence.Rows[i].Cells["Description"].Value?.ToString();

    db.EvidenceDetail.Add(newEvDetail);
}
db.Save();

额外注意事项

  • 不要在循环里频繁调用db.Save(),统一在循环结束后执行一次,提升性能
  • 处理单元格值为空的情况,避免NullReferenceException或格式转换异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 16:12:48