How to dynamically assign a property in a collection

I am working on 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);**
        }
    }

}

In the given syntax I want to dynamically add a class property . I also add my class to the collection . Is this possible in C #, introduce a class property dynamically? My grid contains more than one column. The column name of my grid is the same as the name of the class property. I want to do the following:

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

Thanks in advance.

+3
source share
2 answers

You can do this with PropertyInfo.SetValue().

In this example, I added an explanation that all this does.

I used the class TestClassfor this example. First I get the type.

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);
    }
}
+4

, ? Btw yes, () , . - , , - , , .Net 4.

0

Source: https://habr.com/ru/post/1774130/


All Articles