0

我有一个按类别过滤记录的下拉列表,但我需要“-- 按类别过滤--”选项充当“查看全部”,从而返回所有记录。

这是在 C# .NET 中。我不认为这太难了,但它现在只是难倒我。

这是该方法的代码隐藏:

protected void PopulateCategories()
{
    category myCategory = new category();
    category[] myCategoryList = myCategory.Listing("title ASC");

    ddlCategories.Items.Add("-- Filter by category --");

    foreach (category category in myCategoryList)
    {
        ListItem item = new ListItem(category.title, category.category_id);
        ddlCategories.Items.Add(item);            
    }
}
4

2 回答 2

2

根据您的数据源是什么以及它对值的反应category.category_id,您应该将值作为“--按类别过滤-”条目的一部分...

ddlCategories.Items.Add(New ListItem("-- Filter by category --", "-1"));

然后,当您使用ddlCategories.SelectedValue(或无论如何使用它)时,请确保如果该值是-1则返回所有内容

于 2012-09-24T16:43:17.233 回答
0

为了使您的表单更直观,您可能需要填充下拉列表,如下所示:

ddlCategories.Items.Add(new ListItem("- View all categories -", "-1"));

foreach (category category in myCategoryList)
{
    ListItem item = new ListItem("View category: " + category.title, category.category_id);
    ddlCategories.Items.Add(item);            
}

然后,为了回答您的问题,创建 2 种数据访问方法:#1 用于检索所有行,#2 用于检索按所选类别过滤的行。

public DataTable GetData(int categoryId)
{
  if(categoryId <= 0)
  {
    // #1
    return CatProvider.FindAll(); // Ex. SELECT * FROM table_cats;
  }
  else
  {
    // #2
    return CatProvider.FindByCategoryId(categoryId); // Ex. SELECT * from table_cats where id_category = @id_category;
  }
}

但是,我会考虑改用复选框(每个类别 1 个),因此用户可以选择所有类别的任何排列、仅 1 个类别或多个类别的任意组合。

(根据您提供的信息,这就是我现在可以建议的全部内容。)

于 2012-09-24T17:08:07.313 回答