2013-05-30 2 views
0

В основном я отражаю класс, который является объектным источником данных, и мне нужно иметь возможность создавать параметры на лету. Но я понятия не имею, как на самом деле добавить их в Propertyinfo параметров. Метод aspx не будет работать, потому что все это делается «на лету».Использование параметра Reflection objectdatasource Параметры с параметромCollection

Это то, что у меня есть, но ошибки при попытке добавить объект коллекции

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

И, пожалуйста, не забудьте указать имя класса с пространством имен (в «DataSource "строка). Я проверил код и успешно завершил его. :)

Этот код установит Параметры свойство DataField объекта к заданному значению. Если вы хотите установить Parameters свойство другого объекта DataSource вы можете просто заменить последнюю строку:

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 –