【问题标题】:Filtering a datasource on Click Event在点击事件上过滤数据源
【发布时间】:2020-03-29 09:28:10
【问题描述】:

我有一个在 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 事件处理程序一起使用。

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

【问题讨论】:

  • 数据必须存在于某处,而且我不确定将数据存在于数据库中并在没有 where 子句的情况下查询它,然后用 where 子句查询它是否符合“重复自己”/违反 DRY。你更喜欢什么;让服务器记住 20,000 行并在用户返回搜索查询时过滤它们?或者让数据库保留数据并适当地查询它。我选后者。服务器内存/用户会话不是数据库
  • @CaiusJard 与您的评论有关,那么您会说使用视图状态更新网格视图中的记录并将更新保存到数据库中也不合适吗?只是权衡我的选择。但是是的,我明白你关于查询的观点。

标签: asp.net vb.net linq filter


【解决方案1】:

Where 函数需要一个谓词。在末尾添加一个.ToList,这样你就有一个List(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

【讨论】:

    猜你喜欢
    • 2014-08-20
    • 1970-01-01
    • 1970-01-01
    • 2011-09-26
    • 2021-03-05
    • 1970-01-01
    • 1970-01-01
    • 2014-03-22
    • 1970-01-01
    相关资源
    最近更新 更多