2013-05-30 27 views
0

基本上,我反映的是一个objectdatasource类,我需要能够在运行中创建参数。但我不知道如何将它们实际添加到参数的Propertyinfo中。 aspx方法将不起作用,因为这些都是在飞行中完成的。使用反射设置objectdatasource ParameterCollection的参数

这是我有什么,但它的错误,当您尝试添加集合对象

 var dataSourceType = typeof(DataSource).Assembly.GetType("DataSource", true); 
    var datafield = Activator.CreateInstance(dataSourceType); 
    PropertyInfo pinfo = datafield.GetType().GetProperty("Parameters"); 

    ParameterCollection parmCollection = new ParameterCollection(); 
    QueryStringParameter myParm = new QueryStringParameter("ber", DbType.String, "ber"); 
    parmCollection.Add(myParm); 
    pinfo.SetValue(pinfo, parmCollection, null); 

所以,是的,我基本上要创建数据源,然后附上了我的参数集合,然后当电网或其它控制加载它可以做源数据绑定。

+0

http://stackoverflow.com/questions/3862226/dynamically-create-a-class-in-c-sharp –

回答

0

我不知道,但你有一个错字......难道你的意思是这个:

var dataSourceType = typeof(DataSource).Assembly.GetType("DataSource", true); 
var datafield = Activator.CreateInstance(dataSourceType); 
PropertyInfo pinfo = datafield.GetType().GetProperty("Parameters"); 

ParameterCollection parmCollection = new ParameterCollection(); 
QueryStringParameter myParm = new QueryStringParameter("ber", DbType.String, "ber"); 
parmCollection.Add(myParm); 
pinfo.SetValue(datafield, parmCollection, null); 

并请务必包括与命名空间中的类的名称(“数据源“字符串)。 我测试了代码并成功完成。 :)

此代码将参数属性的数据字段对象设置为指定值。如果你想设置的参数其他数据源对象的属性你可能只需更换的最后一行:

pinfo.SetValue(«object», parmCollection, null); 

你的本意是有点迷惑......为什么你不能投你要处理的对象作为一个ObjectDataSource,然后访问/设置你想要的属性?

object dataSource = new ObjectDataSource(); 

(...) 

var objectDataSource = dataSource as ObjectDataSource; 
if (objectDataSource != null) 
{ 
    var selectParams = objectDataSource.SelectParameters; 
    selectParams.Clear(); 
    selectParams.Add(new QueryStringParameter("ber", DbType.String, "ber")); 
} 

我希望它有帮助。

+0

感谢您的错字捕获,但不幸的是,这就是它。我认为真正的问题是我的参数canwrite = false –