【问题标题】:What is the best way to get the index of the datagridview row with the smallest integer value for a particular column获取具有特定列的最小整数值的datagridview行的索引的最佳方法是什么
【发布时间】:2018-10-30 01:35:41
【问题描述】:

谁能告诉我最好/最有效的方法是在数据网格视图中获取特定列的最小整数值的行的索引。

我使用 foreach 循环来遍历行集合并比较每行的相应值并存储最小值。每次我找到一个较小的值时,我都会用该值更新我的“最小”变量。这行得通,但我很确定一定有一些 lambda 表达式可以做得更好。有人可以帮忙吗?

这是包含值的列:

dgvItems.Rows[i].Cells["col1"].Value

非常感谢。

【问题讨论】:

标签: c# winforms datagridview


【解决方案1】:

最好的方法是使用 LINQ 查询,

LINQ 比 for 循环更美观、更易读、更高效

你应该使用DataGridView数据源而不是直接使用DataGridView数据

DataTable dt = dgv.DataSource as DataTable;

MinRow:     var result = dt.Rows.IndexOf(dt.AsEnumerable().OrderBy(x => x["col1"]).First());
MaxRow:     var result1 = dt.Rows.IndexOf(dt.AsEnumerable().OrderByDescending(x => x["col1"]).First());

希望对你有帮助

【讨论】:

    【解决方案2】:

    我会在这方面为您提供帮助,因为您不是在询问有关使用 LINQ 的问题。 让我们以“通常”的方式来做吧..

    首先,声明一个新的List

    List<int> columnValue = new List<int>();
    

    我们将遍历网格中的每一行

        foreach (DataGridViewRow row in myDataGrid.Rows)
        {
            if (null != row && null != row.Cells["col1"].Value)
            {
                //Add the value of columnValue to list
                columnValue.Add(Convert.ToInt32(row.Cells[0].Value.ToString()));
            }
        }
    

    并获得最小值。来自 LIST 的值

        int result = columnValue.Min();
    

    最后,得到我们从LIST中得到的值的索引

        int i = columnValue.IndexOf(result); //returns the Index from "result" var
    

    【讨论】:

    • 感谢 Louie,感谢您的努力。但是,此解决方案在计算上比我目前拥有的(如我的 OP 中所述)更密集,因为它使用了一个额外的集合以及它固有的 Min 方法。不过还是谢谢 :-)
    猜你喜欢
    • 2014-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多