2017-10-19 12 views
1

웹 응용 프로그램을 다루고 있습니다. 내게 묻는 것은 페이지가로드 될 때 내 드롭 다운 목록에 표시하고 저장할 특정 속성이있는 인덱스 0이 표시된다는 것입니다.리팩토링, selectedIndexChanged 이벤트를 기반으로 DataSource 유형 변경, C#

이를 바탕으로 목록을 보유하는 두 번째 다운 목록이 있습니다.

다음으로 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에서 세 가지 가능한 테이블 쿼리가 있습니다.

죄송합니다. 말씀해 주셨으면합니다. 불편을 끼쳐 드려 죄송합니다.

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()을 캐스팅하고 bindControls() 방법 대신 IQueryable에 있음을 전달 추천 : 어쩌면 이제 더 의미

+0

게시 된 코드는 의미가 없습니다. 왜 유형을 바꾸고 싶습니까? 왜 우리에게'accountQuery'를 보여주고 있습니까?하지만 당신의 코드에서는 사용되지 않습니다. – CodingYoshi

답변

0

사용 제네릭을합니다.

... 그러나 나는 정말로 이해하지 못합니다. 이렇게하면됩니까? 제 의견으로는 부울 스위치가 필요하지 않습니다.

+0

당신 말이 맞아 ... 부울은 완전히 필요하지 않습니다 ... 나는 이후에 및 이후에 캐스팅 메소드 매개 변수로 IQeryable dataSource를 설정하려고 시도했습니다. ddl.DataSource = (IQueryable ) dataSource.ToList(); 괜찮은 접근 방식으로 보이십니까? – sneufeld

+0

제네릭을 사용하는 경우'object'에서 캐스트 할 필요가 없습니다. 'IQueryable '을 얻었으므로 당신은 잘합니다 - 제가 오해하지 않는 한. –

+0

Visual Studio에서 을 인식하는 데 필요한 구문을 사용합니까? 그것은 신참 주석처럼 보일지도 모르지만 내가 IQueryable을 입력 할 때마다 지옥에서 빨간색 밑줄을 계속 보게됩니다 ... T 밑에 빨간색 밑줄 ... 나는 그것이 일반으로 식별되는 방법을 생각했습니다 ...? 나는 질문으로 논평하는 것을 의미하지 않는다 그러나 당신의 대답에 속한다 ... – sneufeld