使用linq和datagrid进行自动完成搜索的问题

时间:2011-02-26 03:44:19

标签: c# winforms linq search

我想进行搜索,将结果填充到带有LINQ的Gridview。

这是我使用Linq之前的代码,工作正常:

    foreach (DataRow dr in dt.Select("Name like  '" + txtSearch.Text + "%'"))
        {
            dtable.ImportRow(dr);
        }

在我的linq代码中,我使用bsUser作为BindingSource。

 private void txtSearch_TextChanged(object sender, EventArgs e)
    {

        string input = txtSearch.Text.Trim().ToLower();
        if (input.Length <= 0) return;

        IList<User> u = (bsUser.Filter? select?
                        .Where(x => (x.Name.ToLower().StartsWith(input) 
                        && (x.RoleId == (int)cbRole.SelectedValue))).ToList());

        bsUser.DataSource = u;            

    }

我遇到的问题是,如果u返回0行,那么绑定到bsUser的Gridview将不再有数据。 datasource.count() = 0

有人可以给我一个解决方法或建议我如何解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

嗨,我想我已经通过这种方式做到了这一点。看起来很不错..

  private void txtSearch_TextChanged(object sender, EventArgs e)
    {
        string input = txtSearch.Text.Trim().ToLower();
        if (input.Length > 0)
            bsUser.Filter = "Name like '" + input + "%' AND RoleId = '" + (int)cbRoleSearch.SelectedValue + "'";
        else
            FilterCBRoleSearch(Convert.ToInt16(cbRoleSearch.SelectedValue));
    }