重构,基于selectedIndexChanged事件改变DataSource类型,C#
我正在处理一个web应用程序。问我的是,当页面加载时,我的下拉列表显示索引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
。
...但我并不真正了解为什么你这样做。在我看来,你不需要你的布尔开关。
你是对的...布尔是完全不需要的...我已经尝试设置IQueryable
如果使用泛型,则不必从“对象”进行投射。你有'IQueryable
是否有视觉工作室需要使用声明来识别
您的发布代码没有意义。你为什么想改变类型?你为什么要向我们展示'accountQuery',但它没有在你的代码中使用。 – CodingYoshi