重构,根据selectedIndexChanged事件更改DataSource类型,C#

时间:2017-10-19 02:24:58

标签: c# wcf refactoring

我正在处理一个Web应用程序。我的问题是,当页面加载时,我的下拉列表显示索引0,并显示和存储特定属性。

基于此,有一个第二个下拉列表来保存一个列表。

接下来在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的三种不同的可能表查询。

抱歉,我应该提到这一点,我很抱歉与它有任何混淆。也许现在更有意义

1 个答案:

答案 0 :(得分: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()并将其传递给bindControls()方法而不是IQueryable

...但我真的不明白为什么你这样做。在我看来,你不需要你的布尔开关。