【问题标题】:Search in current column of DataGridView using LINQ in C#在 C# 中使用 LINQ 在 DataGridView 的当前列中搜索
【发布时间】:2017-05-09 19:29:40
【问题描述】:

我想在选定列(当前列)中搜索 DataGridView 中的显示结果,但是当搜索值时,DataGridView 中不显示任何内容
检查我的代码:

private void txt_search_TextChanged(object sender, EventArgs e)
{
    int columnIndx = dgv_prs_add.CurrentCell.ColumnIndex;
    string columnName = dgv_prs_add.Columns[columnIndx].Name;
    lblPath.Text = columnIndx.ToString() + columnName.ToString();
    var query = (from d in db.tbl_PrsInfos
            where txt_search.Text.Contains(columnName)
            select d).ToList();
    dgv_prs_add.DataSource = query;
}

【问题讨论】:

  • 检查你的代码吗?
  • 为什么不改用查询。查询中的行号和列号与 DGV 相同。
  • @EpicKip 哦,是的,你是对的。我已经编辑了
  • 您在文本中搜索 columnName,我怀疑这是您所期望的。您需要做的是在运行时根据所选列创建搜索条件,然后将其传递给表的 Where LINQ 方法。
  • @jdweng 如果可能的话,请通过编码向我详细说明。谢谢

标签: c# linq datagridview


【解决方案1】:

您应该创建条件以在运行时根据所选列过滤记录。

您可以使用Where LINQ 方法对表应用条件。此方法采用Func<T, bool> 形式的条件,并在运行时应用于列表。

private void txt_search_TextChanged(object sender, EventArgs e)
{
    int columnIndx = dgv_prs_add.CurrentCell.ColumnIndex;
    string columnName = dgv_prs_add.Columns[columnIndx].Name;
    lblPath.Text = columnIndx.ToString() + columnName.ToString();

    //Assuming that class name is "PersonInfo".
    Func<PersonInfo, bool> criteria;

    var searchString = txt_search.Text;
    //Assuming that columns are "FirstName", "LastName" and "Address".
    switch (columnName)
    {
        case "FirstName":
            criteria = person=> person.FirstName.Contains(searchString);
            break;
        case "LastName":
            criteria = person=> person.LastName.Contains(searchString);
            break;
        case "Address":
            criteria = person=> person.Address.Contains(searchString);
            break;
        default:
            criteria = person=> true;
            break;
    }

    var query = db.tbl_PrsInfos.Where(criteria).ToList();

    dgv_prs_add.DataSource = query;
}

正如代码中提到的,我已经假设了一些东西,例如 ClassName 及其属性。您需要输入适当的值。

【讨论】:

  • 感谢您的回答,这让我在 criteria = person => person.FirstName.Contains(searchString); 行出现错误。错误:不包含“FirstName”的定义,并且没有扩展方法“FirstName”接受类型的第一个参数
  • 我在答案中提到您需要使用适当的属性和类名。不要只是复制粘贴代码。你需要把你的类的属性名和你的表的列名...
  • 是的,我这样做了,但又给了我错误,我的班级名称是“Personal_Info”,列名称是“FullName”、“Personal”和“Email”。
  • 我解决了这个问题,但现在给了我新的错误:错误 1 ​​无法将类型 'bool' 隐式转换为 'System.Func' D:\C# Projects\BMS - Copy\ BMS\Personal_Info.cs 243 32 BMS
猜你喜欢
  • 1970-01-01
  • 2014-12-05
  • 1970-01-01
  • 2011-09-06
  • 2020-08-29
  • 2012-10-21
  • 2021-10-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多