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 に答える