任何人都可以告诉我,最好/最有效的方法是在特定网格中具有最小整数值的数据网格视图中获取行的索引。
我使用foreach循环遍历行的集合并比较每行的相应值并存储最小的值。每当我找到一个较小的值时,我都会用该值更新“最小”变量。这可以工作,但是我很确定必须有一些lambda表达式可以做得更好。有人可以帮忙吗?
这是包含值的列:
dgvItems.Rows[i].Cells["col1"].Value
非常感谢。
答案 0 :(得分: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());
希望这可以为您提供帮助
答案 1 :(得分:0)
由于您没有询问使用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()));
}
}
并获得MIN。 LIST中的值
int result = columnValue.Min();
最后,获取我们从LIST获得的值的索引
int i = columnValue.IndexOf(result); //returns the Index from "result" var