2012-09-24 74 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個類別或多個類別的任意組合。

(這是對所有我可以建議現在根據您提供的信息。)

相關問題