Вы можете сделать это с 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);
}
}