使用Reflection使用ParameterCollection设置objectdatasource参数

时间:2013-05-30 20:56:47

标签: c# reflection parameters objectdatasource

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

这就是我所拥有的,但是当您尝试添加集合对象时它会出错

        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);

所以是的,我基本上想要创建数据源,然后附加我的参数集合,然后当网格或其他控件加载时,它可以在源上执行数据绑定。

1 个答案:

答案 0 :(得分: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);

请务必在命名空间中包含类的名称(“DataSource”字符串)。 我测试了代码并成功完成了。 :)

此代码将 datafield 对象的 Parameters 属性设置为指定值。如果要设置其他DataSource对象的 Parameters 属性,可以只替换最后一行:

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"));
}

我希望它有所帮助。