2012-09-24 38 views
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);    
    } 
} 

回答

2

根据您的数据源是什么,以及它是如何反应的category.category_id值,你应该把一个值作为你的“的一部分 - 按类别过滤 - ”项...

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

然后,当你使用ddlCategories.SelectedValue(或者无论你使用它)确保,如果该值-1然后返回一切

+0

我尝试添加它,但它告诉我,有没有超载的ddlCategories采用两个argumenets。思考? – Peter

+0

@Peter - 最有可能的是,你刚刚添加了另一个参数,并没有使用'New ListItem' – freefaller

+0

我在哪里添加? – Peter

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个类别或多个类别的任意组合。

(这是对所有我可以建议现在根据您提供的信息。)

相关问题