C# - 用于循环DataGridView.Rows的Lambda语法

时间:2009-01-16 19:46:24

标签: c# .net datagridview lambda

C#中用于循环DataGridView的每个DataGridViewRow的正确lambda语法是什么?举个例子,假设函数根据Cells [0]中的某个值使行.Visible = false。

2 个答案:

答案 0 :(得分:4)

嗯,在枚举上没有内置的ForEach扩展方法。我想知道一个简单的foreach循环可能不容易吗?尽管如此,写起来还是微不足道的......

在推动时,也许你可以在这里使用Where

        foreach (var row in dataGridView.Rows.Cast<DataGridViewRow>()
            .Where(row => (string)row.Cells[0].Value == "abc"))
        {
            row.Visible = false;
        }

但就个人而言,我只是使用一个简单的循环:

        foreach (DataGridViewRow row in dataGridView.Rows)
        {
            if((string)row.Cells[0].Value == "abc")
            {
                row.Visible = false;
            }
        }

答案 1 :(得分:4)

请参阅我对此问题的回答:Update all objects in a collection using LINQ

使用内置的LINQ表达式是不可能的,但是很容易自己编写代码。我调用了迭代方法,以便不干扰List&lt; T&gt; .ForEach。

示例:

dataGrid.Rows.Iterate(r => {r.Visible = false; });

迭代来源:

  public static void Iterate<T>(this IEnumerable<T> enumerable, Action<T> callback)
    {
        if (enumerable == null)
        {
            throw new ArgumentNullException("enumerable");
        }

        IterateHelper(enumerable, (x, i) => callback(x));
    }

    public static void Iterate<T>(this IEnumerable<T> enumerable, Action<T,int> callback)
    {
        if (enumerable == null)
        {
            throw new ArgumentNullException("enumerable");
        }

        IterateHelper(enumerable, callback);
    }

    private static void IterateHelper<T>(this IEnumerable<T> enumerable, Action<T,int> callback)
    {
        int count = 0;
        foreach (var cur in enumerable)
        {
            callback(cur, count);
            count++;
        }
    }