我在 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);**
}
提前致谢。
最佳答案
您可以使用 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);
}
}
关于c# - 如何动态分配集合中的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4146571/