2016-03-29 16 views
0

名前をリストする既存のドロップダウンリストがあります。依存ドロップダウンリスト(カスケード)

私は何を私が達成しようとしていることであるすべてのアルファベットに

をcontaingsダウンリスト別のドロップを作成しようとしています:

ユーザーがアルファベットDropsownlistからアルファベットを選択すると、二dropdwonlistはすべてに移入されます選択されたアルファベットで始まる名前。

私はこのコードを持っていました。

`NamesDropDownList.SelectedValue = (NamesDropDownList.DataValueField).Where(NamesDropDownList.SelectedItem.Value).Contains(AlphabetsDropDownList.SelectedItem.Value);` 

が、それは私にエラーを与えている:

Error Message: string does not contain a definition of Where, and the method overload contains invalid arguments. 

この問題への任意のヘルプやアプローチ。

おかげ

答えて

0

ちょうどアルファベットのドロップダウンリストからのSelectedIndexChanged()イベントハンドラは、名前のリストを作成するがあります。

private DataSet GetNameData() 
{ 
     string sql = "select Firstname, Lastname from Names where Firstname like '@Letter%';"; 

     SqlParameter arg = new SqlParamter("@Letter", ddlLetter.SelectedItem.Value)); 

     SqlCommand cmd = new SqlCommand, sql, ConnectionString); 
     cmd.Paramters.Add(arg); 

     SqlDataAdapter da = new SqlDataAdapter(); 
     DataSet ds = new DataSet(); 

     da.SelectCommand = cmd; 
     da.Fill(ds); 

     return ds; 
} 
private void ddlLetter_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    DataSet Names = GetNameData(); 

    ddlNames.DataSource = Names.Table[0]; 
    ddlNames.DataTextField = "Firstname"; 
    ddlNames.DataValueField = "Id"; 
    ddlNames.DataBind(); 

    ddlNames.Items.Insert(0, new ListItem("Please select a name", 0); 
} 

アルファベットのドロップダウンリストがAutoPostBack="true"に設定されていることを確認してください。そうしないと動作しません。

希望すると便利です。

1

1行のコードにはいくつか問題があります。データのソースから始めましょう。 DropDownList上だけstring財産だ

NamesDropDownList.DataValueField 

:これはあなたのデータのソースではありません。 からのレコードを選択することはできません。データベース(またはバッキングデータがある場合はどこでも)からレコードを選択する必要があります。あなたはそのコンテキストを提供していないので、私はそれが標準のLINQクエリ可能なデータソースだと仮定します。は、あなたがデータを選択するためにに「どこで」句を添付したいものをしていることを

dbContext.Names 

:それはこのようなものだと、酒または例えば、言ってみましょう。それでは、その節に移り、それがどのように見えるかを見てみましょう。まず第一に、それははこのような見ていません:

.Where(NamesDropDownList.SelectedItem.Value).Contains(AlphabetsDropDownList.SelectedItem.Value) 

.Where()方法はstringを期待していない、それは述語としてFunc<T, bool>を期待しています。 の中には、述語が.Contains()の部分にあり、の文字列で動作し、全体のコレクションではありませんです。何のコード行は、本質的にないことである

dbContext.Names.Where(n => n.Name.Contains(AlphabetsDropDownList.SelectedItem.Value)) 

その後、使用できるデータソースからあなたのレコードのフィルタセットを与えるだろう

From the Names table in the database, select all records where the Name column contains the given value.

だから、次のようになります次にDropDownListに結合する。

+0

あなたは天才です、これは名前 'publicを取得するメソッドです。IEnumerable GetAllNamesPlusUnknown(){(var repo = RepositoryFactory.Create()){var allNames = repo.Matches(new AllName()); var rv = new List (){新しい名前( "")}; rv.AddRange(allname.Select(j =>新しい名前(j.Name)));リターンrv;私はこれを使って作業しなければなりません。プロジェクトは本当にうまくいきますし、名前リストが長すぎてリストを作成できないように設計されていませんでした。文字を選択すると約2000の名前をスクロールできます。 – user5711432

+0

@ user5711432:データベースから(またはどこに格納されていても)どのようにデータを取得するかはあなた次第です。この 'GetAllNamesPlusUnknown'メソッドは' IEnumerable 'を返します。したがって、返された値に' .Where() 'を添付して、このメソッドをこの操作のバッキングデータとして扱うことができます。 – David

+0

ObjectDataSourceを使ってデータを取得しようとしましたが、Sqlデータソースを使用していて、アルファベットを取得できました。上記のメソッド(objectDatasource)を使用して名前を取得しました。データを取得するのが賢明だと思いますこれはAlphabets'public IEnumerable GetAllAlphabets(){(var repo = RepositoryFactory.Create())を使用して取得します {var allalphabets = repo.Matches(new AllAlphabets()); var al =新しいリスト(){新しいGroupAlphabets()}; return al;}} 'そして、コードの中でそれを返しました。何が問題を薄くしていますか? – user5711432

関連する問題