2011-01-26 15 views
0

私はさらに説明することができます、私は私のデータベースに多くの人がいます。行動計画を立てるために1対多数のオプションがある場合、私のページには行動計画を立てているすべての人が表示されます。私はまた、アクションプランを持っている人々のすべてをスローフィルタードロップダウンリストを持って...これはうまく動作します。ドロップダウンリストはうまく動作しますが、私が得ることができない部分は人名を持つドロップダウンリストフィルタがあることです(その人のためのすべてのアクションプランを見つけることです)。しかし、ドロップダウンリストはデータベース内のすべての名前を表示しますアクションプランを持っている人だけを表示するようにドロップダウンリストを制限する方法はありますか?この上のポストはすでに存在する場合ドロップダウンリストのオプションを有効なオプションのみに制限するにはどうすればよいですか?

申し訳ありません...私は見ていると見ているが、溶液に

おかげ

P.S.を見つけることができませんされていますこれは役立つかもしれない....とはい私はこれはこれはこれは基本的に、あなたのドロップダウンをするSQL質問の詳細です私のコントローラで

var predicate = PredicateBuilder.False<ACTION_PLAN>(); 
    predicate = predicate.Or(p => p.COMPLETED != null); 

    // former borrower 
    if ((Request.Form["FORMER_BORROWER"] != null) && Request.Form["FORMER_BORROWER"] != "") 
    { 
     FormerBorrower = Request.Form["FORMER_BORROWER"]; 
     ViewData["FORMER_BORROWER"] = new SelectList((from n in _db.Loans where (n.FORMER_BORROWER_NAME != null) select new { n.FORMER_BORROWER_NAME, FORMER_BORROWER_NAMEID = n.FORMER_BORROWER_NAME }).Distinct().ToList(), "FORMER_BORROWER_NAMEID", "FORMER_BORROWER_NAME", FormerBorrower); 
     predicate = predicate.And(p => p.Loan.FORMER_BORROWER_NAME == FormerBorrower); 
    } 
    else 
    { 
     FormerBorrower = ""; 
     ViewData["FORMER_BORROWER"] = new SelectList((from n in _db.Loans where (n.FORMER_BORROWER_NAME != null) select new { n.FORMER_BORROWER_NAME, FORMER_BORROWER_NAMEID = n.FORMER_BORROWER_NAME }).Distinct().ToList(), "FORMER_BORROWER_NAMEID", "FORMER_BORROWER_NAME"); 
    } 

    // current ownership entity 
    if ((Request.Form["CURRENT_OWNERSHIP_ENTITY"] != null) && Request.Form["CURRENT_OWNERSHIP_ENTITY"] != "") 
    { 
     CurrentOwnershipEntity = Request.Form["CURRENT_OWNERSHIP_ENTITY"]; 
     ViewData["CURRENT_OWNERSHIP_ENTITY"] = new SelectList((from n in _db.DOM_CURRENT_OWNERSHIP_ENTITies select n).ToList(), "CURRENT_OWNERSHIP_ENTITY", "CURRENT_OWNERSHIP_ENTITY", CurrentOwnershipEntity); 
     predicate = predicate.And(p => p.Loan.DOM_CURRENT_OWNERSHIP_ENTITY.CURRENT_OWNERSHIP_ENTITY == CurrentOwnershipEntity); 
    } 
    else 
    { 
     CurrentOwnershipEntity = null; 
     ViewData["CURRENT_OWNERSHIP_ENTITY"] = new SelectList((from n in _db.DOM_CURRENT_OWNERSHIP_ENTITies select n).ToList(), "CURRENT_OWNERSHIP_ENTITY", "CURRENT_OWNERSHIP_ENTITY"); 
    } 

    // responsible party 
    if ((Request.Form["RESPONSIBLE_PARTY"] != null) && Request.Form["RESPONSIBLE_PARTY"] != "") 
    { 
     ResponsibleParty = Request.Form["RESPONSIBLE_PARTY"]; 
     ViewData["RESPONSIBLE_PARTY"] = new SelectList((from n in _db.ACTION_PLANs select n).ToList(), "RESPONSIBLE_PARTY", "RESPONSIBLE_PARTY", ResponsibleParty); 
     predicate = predicate.And(p => p.RESPONSIBLE_PARTY == ResponsibleParty); 
    } 
    else 
    { 
     ResponsibleParty = null; 
     ViewData["RESPONSIBLE_PARTY"] = new SelectList((from n in _db.ACTION_PLANs select n).ToList(), "RESPONSIBLE_PARTY", "RESPONSIBLE_PARTY"); 
    } 

    // completed 
    if ((Request.Form["COMPLETED"] != null) && Request.Form["COMPLETED"] != "") 
    { 
     Completed = System.Convert.ToBoolean(Request.Form["COMPLETED"]); 
     ViewData["COMPLETED"] = new SelectList((from n in _db.ACTION_PLANs where (n.COMPLETED != null) select new { n.COMPLETED}).Distinct().ToList(), "COMPLETED", "COMPLETED", Completed); 
     predicate = predicate.And(p => p.COMPLETED == Completed); 
    } 
    else 
    { 
     Completed = System.Convert.ToBoolean(null); 
     ViewData["COMPLETED"] = new SelectList((from n in _db.ACTION_PLANs where (n.COMPLETED != null) select new { n.COMPLETED }).Distinct().ToList(), "COMPLETED", "COMPLETED"); 
    } 

    // target date 
    if ((Request.Form["TARGET_DATE"] != null) && Request.Form["TARGET_DATE"] != "") 
    { 
     TargetDate = System.Convert.ToDateTime(Request.Form["TARGET_DATE"]).ToString("MM/dd/yyyy"); 
     ViewData["TARGET_DATE"] = new SelectList((from n in _db.ACTION_PLANs select n).ToList(), "TARGET_DATE", "TARGET_DATE", TargetDate); 
     predicate = predicate.And(p => p.TARGET_DATE == Convert.ToDateTime(TargetDate)); 
    } 
    else 
    { 
     TargetDate = ""; 
     ViewData["TARGET_DATE"] = new SelectList((from n in _db.ACTION_PLANs select n).ToList(), "TARGET_DATE", "TARGET_DATE"); 
    } 
+2

あなたはddlをすべての人のリストにバインドしていますか?バインドするデータソースをフィルタリングできないため、アクションプランを持つ人のみが含まれるようになる理由はありますか?これは、コードレイヤーまたはデータアクセスレイヤーのいずれかで行います。これは実装するのが簡単なはずです - おそらくコードサンプルはどこに詰まっているのかを特定するのに役立ちますか? –

+0

ダビデは正しい...私たちがあなたのDDLをどのように埋もれようとしているのか分かっていれば、私たちはもっと助けてくれるでしょう。デイビッドが言ったことにピギーバックするだけで、LINQを使ってコレクションの結果をフィルタリングすることができます。あなたのDBをもう一度呼び出すだけで、結果をDDLなどにバインドすることができます。 DDL。 – jonnyb

答えて

1

である私の見解では

<td><%=Html.DropDownList("FORMER_BORROWER", "All")%></td> 
     <td><%=Html.DropDownList("CURRENT_OWNERSHIP_ENTITY", "All")%></td> 
     <td><%=Html.DropDownList("RESPONSIBLE_PARTY", "All")%></td> 
     <td><%=Html.DropDownList("COMPLETED", "All")%></td> 
     <td><%=Html.DropDownList("TARGET_DATE", "All")%></td> 

あるMVC を使用しています

擬似コード:

Select Person.* from Person Inner Join ActionPlan on Person.PersonnId = ActionPlan.PersonId 

この要求の結果を表示します内部結合は、クエリをActionPlanテーブルのレコードを持つテーブルの人物の行だけを返すようにします。

+0

はい、SQLの例は表示したいものですが、どこでどのようにドロップダウンリストを作成できるのか分かりません。これまでのところ私は持っています ​​<%= Html.DropDownList( "FORMER_BORROWER"、 "すべて ")%> – kyle

0

Html.DropDownListですばやくグーグルを行っているのが、これがASP.Net MVCであることを指摘しているようですね。

MVCを使用している場合は、そのデータをフィルタリングできる場所を知らずに、データベースデータを画面に表示することに驚いています。おそらくこれまでのすべてを自動生成しましたか?

私はMVCをあまり使用していませんが、Visual Studioですばやく簡単な例をまとめています。 ViewsとControllersという2つのフォルダが表示されます。

ビューフォルダには、提供したマークアップが存在するビューファイルである必要があります。コントローラで

はこのような何かを探しているコンテンツを持つクラスになる、あなたのビューのコントローラファイルがあるはずですフォルダ:

namespace MvcApplication1.Controllers 
{ 
    [HandleError] 
    public class YourController : Controller 
    { 
     public ActionResult YourView() 
     { 
      ViewData["FORMER_BORROWER"] = new SelectList(db.Borrowers.ToList, "BorrowerID, "Name");    

      return View(); 
     } 
    } 
} 

DropDownListコントロールをバインドするコードのビットが行です。 ViewData ["FORMER_BORROWER"] = ...

ここで、最初のパラメータは単にLINQを使用してそのオブジェクトをフィルタリングできるように、(私の場合はデータベースにアクセスする)IEnumerableです。

以下は、私が提供するIEnumerableがコードで作成する簡単な例ですが、データベースにアクセスしているコードは同様の方法で使用できます。必要な値だけを与えるために結合を使う方法ではありません。

List<SelectListItem> items = new List<SelectListItem>(); 
      items.Add(new SelectListItem { Text = "Swimming", Value = "1" }); 
      items.Add(new SelectListItem { Text = "Cycling", Value = "2", Selected = true }); 
      items.Add(new SelectListItem { Text = "Running", Value = "3" });   

List<ExerciseType> et = new List<ExerciseType>(); 
    et.Add(new ExerciseType{Id="1"}); 
    et.Add(new ExerciseType{Id="2"}); 

// the line below uses LINQ to filter out the item with text of "Swimming"    
var filteredList = from x in items 
        join y in et on x.Value equals y.Id 
        where x.Text != "Swimming" 
        select x; 


ViewData["Testing"] = new SelectList(filteredList, "Value", "Text"); 

上記のコードは、現在だけDDL内の1つの項目が表示されます - サイクリングアイテム起因参加どこに。お使いのコントローラのコードを撮影

、あなたは以下のコードのようなもので終わるだろう(のみFORMER_BORROWER場合/他の枝の半分に焦点を当てた)上記の回答に

FormerBorrower = Request.Form["FORMER_BORROWER"];    
ViewData["FORMER_BORROWER"] = new SelectList((
    from n in _db.Loans 
    join x in _db.ActionPlans on n.BorrowerId equals x.BorrowerId 
    where (n.FORMER_BORROWER_NAME != null) 
    select new { n.FORMER_BORROWER_NAME, FORMER_BORROWER_NAMEID = n.FORMER_BORROWER_NAME }).Distinct().ToList(), 
    "FORMER_BORROWER_NAMEID", 
    "FORMER_BORROWER_NAME", FormerBorrower); 

    predicate = predicate.And(p => p.Loan.FORMER_BORROWER_NAME == FormerBorrower);  

一つのコメントがあることが、この一方であります私は個人的には、コントローラを呼び出すための何らかの種類のサービスを作成し、このデータアクセスロジックの一部を抽象化してデザインを調整することを検討します。理想的には、コントローラレイヤーにObjectContextを配置し、サービスレイヤーにObjectContextを配置し、データレイヤーにアクセスするのと同時にビューを制御しようとしていないコントローラに焦点を当てるのが理想的です。

+0

私は上記のコードを提供しました。データ全体に対して動的なので、ドロップダウンリストを特定の値にハードコードすることができないため、コントローラ全体またはその全体を表示したいのですが、理由はありません。 これまでにお手伝いいただきありがとうございます – kyle

関連する問題