【问题标题】:Product Filter, checkbox looping - quicken process产品过滤器,复选框循环 - 加快流程
【发布时间】:2012-09-19 20:24:20
【问题描述】:

我正在使用 ASP.NET 网络表单。我正在创建基于属性过滤产品的功能。

我现在这样做的方式花费了太长时间。我需要一个更好、更快的方法。

我目前的方法如下。我有一个 GridView,它显示属性名称。 CheckBoxList 嵌套在包含属性值的 ItemTemplate 中。 CheckBoxList 具有 autopostback="true"。在每个 selectedindexchanged 事件上,我循环检查复选框并根据选中状态进行过滤。然后我比较过滤结果和复选框值,并禁用过滤结果中没有的复选框。

这是执行此操作的代码:

protected void cblAttr_SelectedIndexChanged(object sender, EventArgs e)
{
    var filteredResults = ProductAttribute.Get(Convert.ToInt32(Request.QueryString["idsite"]));
    var selectedAttributes = filteredResults;

    foreach (GridViewRow row in gridAttrSet.Rows)
    {
        foreach (ListItem item in ((CheckBoxList)row.FindControl("cblAttr")).Items)
        {
            if (item.Selected == true)
            {
                // filter
                selectedAttributes = selectedAttributes.Where(a => a.idAttr == Convert.ToInt32(item.Value)).ToList();
            }
        }
    }

    // this will now contain 
    filteredResults = (from c in filteredResults
                       join o in selectedAttributes
           on c.idProduct equals o.idProduct
                select new ProductAttribute
                {
                    idProduct = c.idProduct,
                    idAttrSet = c.idAttrSet,
                    idAttr = c.idAttr,
                }).ToList();


    foreach (GridViewRow row in gridAttrSet.Rows)
    {
        if (row.RowIndex > ((GridViewRow)((CheckBoxList)sender).NamingContainer).RowIndex)
        {
            foreach (ListItem item in ((CheckBoxList)row.FindControl("cblAttr")).Items)
            {
                // disable if filtered out
                item.Enabled = !(filteredResults.Where(a => a.idAttr == Convert.ToInt32(item.Value)).ToList().Count == 0);
            }
        }
    } 
}

如您所见,有很多循环正在进行,并且可能有数千条记录。

什么是更快的方法来做到这一点?任何想法将不胜感激。

谢谢!

【问题讨论】:

  • 最好的选择是使用一些客户端功能来实现它。它会比代码端事件丢失得更快
  • 我不知道这会节省多少时间,但您应该能够用 LINQ 语句替换您的第二组嵌套循环,以返回您需要禁用的项目。实际上,您可以使用两组嵌套循环来做到这一点。
  • 另外,您是否确认过滤是您浪费时间的地方,而不是构建 GridView HTML?
  • @AnnL。所以这是从数据库中提取的第一个语句,这需要时间。感谢您的领导。

标签: c# asp.net filter webforms


【解决方案1】:

这里需要时间的部分是对数据库的调用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-30
    • 2020-09-10
    • 2020-05-12
    • 2019-04-25
    • 2019-11-02
    • 2023-03-18
    • 2021-06-02
    相关资源
    最近更新 更多