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

如何用C#实现将一个DGV的数据复制到另一个并统计项出现次数?

解决DataGridView内容统计并填充到另一个DGV的方案

嗨,刚接触C#不用慌!这个需求完全不用逐个搜索特定值,我们可以用**字典(Dictionary)**来自动统计所有非空项的出现次数,步骤很清晰,我给你一步步拆解:

核心思路

  1. 遍历DGV1的所有单元格,把非空内容收集起来,用字典统计每个内容的出现次数
  2. 清空DGV2并设置好对应列
  3. 把字典里的统计结果批量填充到DGV2中

完整代码示例

// 准备字典:键存项目名称,值存出现次数
Dictionary<string, int> itemCountDict = new Dictionary<string, int>();

// 遍历DGV1的每一行
foreach (DataGridViewRow row in dataGridView1.Rows)
{
    // 跳过DGV自带的空白新行(如果开启了允许添加新行的话)
    if (row.IsNewRow) continue;

    // 遍历当前行的每一个单元格
    foreach (DataGridViewCell cell in row.Cells)
    {
        // 处理单元格内容:转字符串+去前后空格,避免空值报错
        string cellContent = cell.Value?.ToString().Trim() ?? string.Empty;

        // 只统计非空内容
        if (!string.IsNullOrEmpty(cellContent))
        {
            // 字典里已有该项目就次数+1,没有就新增项并设次数为1
            if (itemCountDict.ContainsKey(cellContent))
            {
                itemCountDict[cellContent]++;
            }
            else
            {
                itemCountDict.Add(cellContent, 1);
            }
        }
    }
}

// 初始化DGV2:先清空原有内容和列
dataGridView2.Rows.Clear();
dataGridView2.Columns.Clear();

// 给DGV2添加两列:项目名称、出现次数
dataGridView2.Columns.Add("ItemName", "项目名称");
dataGridView2.Columns.Add("Count", "出现次数");

// 把统计结果批量添加到DGV2
foreach (var kvp in itemCountDict)
{
    dataGridView2.Rows.Add(kvp.Key, kvp.Value);
}

关键细节说明

  • 用cell.Value?.ToString().Trim()处理单元格:?.是空值安全运算符,避免单元格为空时触发报错;Trim()去掉前后空格,防止把" Mars "和"Mars"当成不同项统计
  • 跳过IsNewRow:如果你的DGV1允许用户手动添加新行,这个空白新行不需要纳入统计
  • 字典的ContainsKey方法自动判断项是否存在,实现了自动计数,完全不用提前预设要搜索的项目

你可以把这段代码放到按钮的点击事件里(比如一个「统计」按钮的Click事件),运行后就能得到你想要的结果啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 15:33:13