C# 如何在DataGridView中找到具有相同值的单元格?

C# 如何在DataGridView中找到具有相同值的单元格?,c#,datagridview,datagridviewrow,C#,Datagridview,Datagridviewrow,我有DataGridView包含行数和列数,如ID,Name,Addr,等等。我想在Name列中查找具有相同值的行。 e、 g 现在我想基于相同的单元格值获取ID 1和ID 3。有很多方法可以实现这一点 您可以按名称对DataGridView进行排序,然后对其进行迭代以查找重复的名称 或者,您可以像这样将数据读入字典: Dictionary<string, List<int>> data = new Dictionary<string,List<int

我有
DataGridView
包含行数和列数,如
ID
Name
Addr
,等等。我想在
Name
列中查找具有相同值的行。 e、 g

现在我想基于相同的单元格值获取ID 1和ID 3。

有很多方法可以实现这一点

您可以按名称对DataGridView进行排序,然后对其进行迭代以查找重复的名称

或者,您可以像这样将数据读入字典:

    Dictionary<string, List<int>> data = new Dictionary<string,List<int>>();

    foreach (DataGridViewRow row in dataGridView1.Rows)
    {
        string name = row.Cells[1].ToString();
        int ID =  Convert.ToInt32(row.Cells[0]);
        if (data.ContainsKey(name)) data[name].Add(ID);
        else data.Add(name, new List<int>(new int[] { ID }));
    }

    foreach (string name in data.Keys)
        if (data[name].Count > 1 ) 
        {
            Console.Write(name);
            foreach (int ID in data[name]) Console.Write(ID.ToString("##### "));
            Console.WriteLine();
        }
字典数据=新字典();
foreach(dataGridView1.Rows中的DataGridViewRow行)
{
字符串名称=行。单元格[1]。ToString();
int ID=Convert.ToInt32(行单元格[0]);
if(data.ContainsKey(name))data[name].Add(ID);
添加(名称,新列表(新int[]{ID}));
}
foreach(data.Keys中的字符串名称)
如果(数据[名称]。计数>1)
{
控制台。写入(名称);
foreach(数据[name]中的intid)Console.Write(ID.ToString(“#####”);
Console.WriteLine();
}
或者你可以等一个有可爱LINQ解决方案的人

    Dictionary<string, List<int>> data = new Dictionary<string,List<int>>();

    foreach (DataGridViewRow row in dataGridView1.Rows)
    {
        string name = row.Cells[1].ToString();
        int ID =  Convert.ToInt32(row.Cells[0]);
        if (data.ContainsKey(name)) data[name].Add(ID);
        else data.Add(name, new List<int>(new int[] { ID }));
    }

    foreach (string name in data.Keys)
        if (data[name].Count > 1 ) 
        {
            Console.Write(name);
            foreach (int ID in data[name]) Console.Write(ID.ToString("##### "));
            Console.WriteLine();
        }