我在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);**
}
提前致谢。
答案 0 :(得分:4)
您可以使用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);
}
}
答案 1 :(得分:0)
我想念您的问题,您想用第二个片段实现什么目标?是的,如果已在类中定义了该属性,则可以在运行时设置类成员(属性)的值。替代方案是从父类派生一个新类并添加缺少的成员,或者如果你想要更动态的东西,请使用.Net 4引入的动态类型。