2017-10-19 4 views
1

私はWebアプリケーションを扱っています。私の質問は、ページが読み込まれると、ドロップダウンリストにインデックス0が表示され、表示および保存する特定のプロパティが表示されるということです。リファクタリング、selectedIndexChangedイベントに基づくDataSourceタイプの変更、C#

これに基づいて、リストを保持する2番目のダウンリストがあります。

次のselectedIndexChangedイベントでは、ddl1のインデックスを変更する必要があります。これをddl2のデータに変更してください。

データが入力されるのは、すべてデータベースクエリのデータです。

私はリファクタリングの過程にあり、私はちょうどbindControlsメソッドにデータを渡すことができるように方法を見つけようとしています。私はメソッドに渡しているブール値に基づいてキャストできる一般的なデータ型を渡しています。ここで

は、私は私が望むものに、このデータソースを割り当てることができる方法がなければならない知っている例

IQueryable<BankAccount> accountQuery = db.BankAccounts.Where(x => x.ClientId 
== clientId && x.AccountNumber != accountNumber); 


private void bindControls(DropDownList ddl, string textFieldProp, string 
dataFieldProp, boolean isBillPayment, object dataSource) 
{ 
    //this is where my confusion is... i don't know how to change the type 
    //of the object 
    if(isBillPayment == true) 
     dataSource = typeof(IQueryable<BankAccount>); 
    ddlDataSource = dataSource.ToList() 
    ddlDataTextField = textFieldProp; 
    ddlDataValueField = dataFieldProp; 
    ddl.DataBind(); 
} 

です。 私が投稿したクエリは、そのデータソースがどのようなものになるかの例です。私は、BankAccounts、TransactionTypes、またはPayeesの3つの異なるテーブルクエリを持っています。

私はそれを言及すべきでした、私はそれとの混乱のために残念です。たぶん今

+0

あなたの投稿されたコードは意味をなさない。なぜタイプを変更したいのですか?なぜあなたは 'accountQuery'を表示していますが、あなたのコードでは使われていません。 – CodingYoshi

答えて

0

使用ジェネリックより理にかなっている:

private void bindControls<IQueryable<T>>(DropDownList ddl, string textFieldProp, string 
dataFieldProp, boolean isBillPayment, IQueryable<T> dataSource) 
{ 
    // I don't think you really need this. 
    // if(isBillPayment == true) 
    // dataSource = typeof(IQueryable<T>); 

    ddlDataSource = dataSource.ToList() 
    ddlDataTextField = textFieldProp; 
    ddlDataValueField = dataFieldProp; 
    ddl.DataBind(); 
} 

私は以前.ToList()をキャストし、代わりにIQueryableのごbindControls()方法にそれを渡すことをお勧めします。

...しかし、私は本当に理解していませんなぜあなたはこのようにしています。私の意見では、ブールスイッチは必要ありません。

+0

あなたは正しいです...ブール値はまったく必要ではありません...私はその後、メソッドパラメータとして と後でキャストするように、IQueryable dataSourceを設定しようとしました。ddl.DataSource =(IQueryable )dataSource.ToList (); これはまともなアプローチのように見えますか? – sneufeld

+0

ジェネリックを使用する場合、 'object'からキャストする必要はありません。あなたは 'IQueryable 'を持っていますので、あなたは良いと思います。私が誤解しない限り。 –

+0

Visual Studioでを認識するために必要なステートメントがありますか?それはルーキーコメントのように見えるかもしれませんが、私はIQueryableで入力するたびに地獄から赤い下線をつけています ... Tの下に赤い下線...私はそれがジェネリックとしてどのように特定されていると思ったのですか?私は質問でコメントするつもりはないが、それはあなたの返答に関係する... – sneufeld

関連する問題