从LINQ查询中选择DataGridViewRow [c#]

时间:2018-07-16 08:09:03

标签: c# winforms linq datagridview datatable

我有一个数据网格视图和一个数据表。 我正在对数据表执行LINQ查询,并且我想选择LINQ查询过滤的特定行。最好的方法是什么? 谢谢!

var emp = (from x in dtRoles.AsEnumerable()
            where x.Field<string>("ID")==txtEmp.Id
            select x).FirstOrDefault();

if (emp != null)
{
    //select the specific row in dgvRoles
}

2 个答案:

答案 0 :(得分:1)

如果要选择DataGridView中的行,只需更改查询即可在DataGridView.Rows上进行搜索。

为此,您可以使用DataBoundItem中的DataGridViewRow,这是该行中显示的对象。如果您使用DataTable作为控件的数据源,则数据绑定项将为DataRowView。因此,您可以使用以下查询:

var row = dataGridView1.Rows.Cast<DataGridViewRow>()
    .Where(x=>!x.IsNewRow)
    .Where(x => ((DataRowView)x.DataBoundItem).Row.Field<string>("Id") == "1")
    .FirstOrDefault();
if (row != null)
    row.Selected = true;

如果出于任何原因要开始在DataTable上进行搜索,请首先找到DataRow,然后在Rows的{​​{1}}之间搜索以找到该行:< / p>

DataGridView

答案 1 :(得分:0)

这可以通过扩展FirstOrDefault来简化。通过与Lambda一起使用,我们可以获得特定的行。

var result = dtRoles.AsEnumerable().FirstOrDefault(x => x.Field<string>("ID")== "Sample");//Returns a DataRow

或者,无需将DataTable转换为Enumerable,我们可以使用DataTable.Select过滤特定行。在这种情况下,返回类型为DataTable

    var result = dtRoles.Select("ID = 'Sample'"); //Returns a dataTable
    var row = result[0];//Specific row

C# Fiddle用于示例数据