首页 > 解决方案 > 在点击事件上过滤数据源

问题描述

我有一个在 Page_Load 上指定的数据源:

     // EmpDetailsList query to get employee data

     EmpGridView.DataSource = EmpDetailsList
     EmpGridView.DataBind()

当用户单击按钮时,我正在尝试过滤数据源;

 Protected Sub Search_btn_Click(sender As Object, e As EventArgs) Handles Search_btn.Click    

    FilteredList = EmpDetailsList.Where(EmpDetailsList.FirstName= "John")

    EmpGridView.DataSource = FilteredList
    EmpGridView.DataBind()

End Sub

如果不使用EmpDetailsList作为全局变量,我会遇到很多麻烦。

我也不想违反 DRY 原则,在单击搜索按钮时再次调用数据源。我还尝试将EmpDetailsList作为参数传递给另一个 Sub,但我不明白如何将它与 click 事件处理程序一起使用。

任何建议都会有所帮助,我已经找了几个小时,但我没有找到任何不使用全局变量的东西。

标签: asp.netvb.netlinqfilter

解决方案


Where函数需要一个谓词。.ToList在末尾添加 a ,这样您就有 aList(Of T)而不是IEnumerable.

Protected Sub Search_btn_Click(sender As Object, e As EventArgs) Handles Search_btn.Click
    Dim FilteredList = (EmpDetailsList.Where(Function(e) e.FirstName = "John")).ToList
    EmpGridView.DataSource = FilteredList
    EmpGridView.DataBind()
End Sub

推荐阅读