自动搜索过滤器,无需转换为DataTable

时间:2011-04-27 06:01:36

标签: c# winforms linq-to-sql

我有一个文本框和一个gridview。我可以知道在文本框中输入内容的最佳方法是什么,它会根据关键字自动过滤gridview,例如名称

我已成功完成了这项工作,但只有在转换为dataTable时才具备条件 bsCourse.DataSource = linqHelper.ToDataTable(course.Get() as List<Course>); gvCourse.DataSource = bsCourse;

 private void txtSearch_TextChanged(object sender, EventArgs e)
    {
        string input = txtSearch.Text.Trim().ToLower();
        if (input.Length > 0)
            bsCourse.Filter = "Name like '" + input + "%'";
        else
            bsCourse.Filter = "";
    }

如果没有将数据转换为数据表进行此自动过滤搜索,会有更好的效果吗? 我正在使用linq来sql。 感谢

2 个答案:

答案 0 :(得分:0)

我通常使用正则表达式过滤掉要隐藏的行。在这个例子中,我使用了UltraGrid(Infragistics),但是对于gridview来说,程序可能是相同的。

private void searchBox_TextChanged(object sender, EventArgs e)
{
    if (gridUsers.Rows.Count > 0)
    {
        foreach (UltraGridRow row in gridUsers.Rows)
        {
            if (Regex.IsMatch(row.Cells[1].Value.ToString(), searchBox.Text, RegexOptions.IgnoreCase))
            {
                gridUsers.Rows[indexCounter].Hidden = false;
            }
            else
            {
                gridUsers.Rows[indexCounter].Hidden = true;
            }
        }
    }
}

这可能不是最好的方式(特别是对于有很多行的非常大的网格而言),但它对我有用。

答案 1 :(得分:0)

你可以这样尝试Linq方法:

List<Course> courses = (from i in course.Get() 
                        select new Course() {
                             // Set your property value here.
                        }).ToList();

bsCourse.DataSource = courses;