Как динамически назначить свойство в коллекции - PullRequest
3 голосов
/ 10 ноября 2010

Я работаю на C #.

foreach (DataGridViewRow item in dataGridView1.Rows)
{
    if (Convert.ToBoolean( item.Cells[0].Value) == true)
    {
        foreach (DataGridViewColumn col in dataGridView1.Columns)
        {
            **class oclass=new class();
            oclass.property = item.Cells[col.Name].Value.ToString();
            Collection.add(oclass);**
        }
    }

}

В приведенном выше синтаксисе я хочу динамически заполнить свойство . Я также добавлю свой класс в коллекцию . Возможно в C #, заполните класс свойство динамически? Моя сетка содержит более одного столбца. Имя столбца моей сетки совпадает с именем свойства класса. Я хочу сделать следующее:

foreach (DataGridViewColumn col in dataGridView1.Columns)
{
    **class oclass=new class();
    oclass.col.Name= item.Cells[col.Name].Value.ToString();
    Collection.add(oclass);**
}

Заранее спасибо.

Ответы [ 2 ]

4 голосов
/ 10 ноября 2010

Вы можете сделать это с PropertyInfo.SetValue().

В этом примере я добавил объяснение того, что все это делает.

Я использовалкласс TestClass для этого примера.Сначала я получаю тип.

var type = typeof(TestClass);

Затем я создаю словарь всех имен столбцов и PropertyInfo, который является ссылкой на свойство класса с тем же именем, что и столбец.

var properties = new Dictionary<string, PropertyInfo>();

foreach (DataGridViewColumn col in dataGridView1.Columns)
{
    properties.Add(col.Name, type.GetProperty(col.Name));
}

Затем для каждой строки.

foreach (DataGridViewRow item in dataGridView1.Rows)
{
    if (Convert.ToBoolean( item.Cells[0].Value) == true)
    {

Я создаю новый экземпляр TestClass.

        var instance = new TestClass();

        foreach (DataGridViewColumn col in dataGridView1.Columns)
        {

Я беру свойство из словаря и используюметод SetValue для установки значения экземпляра со значением из столбца.Но, чтобы сделать это, мы должны сначала убедиться, что тип правильный.

            object value = Convert.ChangeType(item.Cells[col.Name].Value, properties[col.Name].PropertyType);

            properties[col.Name].SetValue(instance, value, null);
        }

И наконец, я добавляю экземпляр в коллекцию.

        Collection.Add(instance);
    }
}
0 голосов
/ 10 ноября 2010

Мне не хватает смысла вашего вопроса, чего вы хотите достичь с помощью второго фрагмента? Кстати, вы можете установить значение члена класса (свойство) во время выполнения, если это свойство уже определено в классе. Альтернативой является получение нового класса из родительского и добавление отсутствующих членов или, если вы хотите что-то более динамичное, используйте динамический тип, представленный в .Net 4.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...