如何用C#实现将一个DGV的数据复制到另一个并统计项出现次数?
解决DataGridView内容统计并填充到另一个DGV的方案
嗨,刚接触C#不用慌!这个需求完全不用逐个搜索特定值,我们可以用**字典(Dictionary)**来自动统计所有非空项的出现次数,步骤很清晰,我给你一步步拆解:
核心思路
- 遍历DGV1的所有单元格,把非空内容收集起来,用字典统计每个内容的出现次数
- 清空DGV2并设置好对应列
- 把字典里的统计结果批量填充到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
相关产品推荐
相关产品推荐

