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

发布于 2024-07-12 10:56:44 字数 115 浏览 7 评论 0原文

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

What is the correct lambda syntax in C# for looping over each DataGridViewRow of a DataGridView? And as an example lets say the function makes the row .Visible = false based on some value in the Cells[0].

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

虚拟世界 2024-07-19 10:56:44

请参阅我对此问题的回答:使用 LINQ 更新集合中的所有对象< /a>

这对于内置 LINQ 表达式来说是不可能的,但您自己编写代码非常容易。 我调用方法 Iterate 是为了不干扰 List.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++;
        }
    }

See my answer to this question: Update all objects in a collection using LINQ

Thisi s not possible with the built-in LINQ expressions but is very easy to code yourself. I called the method Iterate in order to not interfere with List<T>.ForEach.

Example:

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

Iterate Source:

  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++;
        }
    }
七秒鱼° 2024-07-19 10:56:44

嗯,可枚举没有内置的 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;
            }
        }

Well, there is no inbuilt ForEach extension method on enumerable. I wonder if a simple foreach loop might not be easier? It is trivial to write, though...

At a push, maybe you could usefully use Where here:

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

But personally, I'd just use a simple loop:

        foreach (DataGridViewRow row in dataGridView.Rows)
        {
            if((string)row.Cells[0].Value == "abc")
            {
                row.Visible = false;
            }
        }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文