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

VB.NET实现DataTable行添加至DataGridView及缺失Lab ID检测

解决方案

一、修复DataTable匹配行添加至DataGridView的问题

你之前的代码错误是因为Rows.Add()接收的是单行数据的数组,而非整个DataRowCollection对象,导致DGV把集合本身当成字符串显示。以下是正确实现:

1. 根据输入的Lab ID查找并添加匹配行

// 获取输入的Lab ID(假设输入控件为txtLabId)
string inputLabId = txtLabId.Text.Trim();
if (string.IsNullOrEmpty(inputLabId)) return;

// 在DataTable中定位匹配行
DataRow targetRow = GetResults.AsEnumerable()
    .FirstOrDefault(row => row["Lab ID"].ToString() == inputLabId);

if (targetRow != null)
{
    // 避免重复添加相同Lab ID的行
    bool isDuplicate = dgScanned.Rows.Cast<DataGridViewRow>()
        .Any(row => row.Cells["Lab ID"].Value?.ToString() == inputLabId);

    if (!isDuplicate)
    {
        // 将匹配行的单元格数据数组添加到DGV
        dgScanned.Rows.Add(targetRow.ItemArray);
    }
}

2. 从DataTable自动同步DGV列名

如果窗体加载时需要自动生成列(替代手动指定),可以在Form_Load事件中添加:

private void Form_Load(object sender, EventArgs e)
{
    // 遍历DataTable列,生成对应DGV列
    foreach (DataColumn col in GetResults.Columns)
    {
        dgScanned.Columns.Add(col.ColumnName, col.ColumnName);
    }
}

若已手动指定DGV列,只需确保列名与DataTable的列名完全一致,即可自动映射数据。

二、找出DataTable中未添加到DGV的Lab ID

通过集合差集对比两边的Lab ID,实现缺失ID的检测:

// 提取DataTable中所有Lab ID
var allLabIds = GetResults.AsEnumerable()
    .Select(row => row["Lab ID"].ToString())
    .ToHashSet();

// 提取DGV中已存在的Lab ID(排除空行)
var scannedLabIds = dgScanned.Rows.Cast<DataGridViewRow>()
    .Where(row => !row.IsNewRow)
    .Select(row => row.Cells["Lab ID"].Value?.ToString())
    .Where(id => !string.IsNullOrEmpty(id))
    .ToHashSet();

// 计算差集得到缺失的ID
var missingIds = allLabIds.Except(scannedLabIds).ToList();

// 弹窗显示结果
if (missingIds.Any())
{
    MessageBox.Show("未添加的Lab ID:\n" + string.Join("\n", missingIds));
}
else
{
    MessageBox.Show("所有Lab ID已添加至DataGridView");
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 05:21:16