C# Winform 下 DataGridView 行轉 模型 Model
阿新 • • 發佈:2022-02-22
/// <summary> /// DataRow 轉 Model /// </summary> /// <typeparam name="T"></typeparam> /// <param name="row"></param> /// <returns></returns> public static IList<T> DataGridViewSelectedRowsToModel<T>( DataGridView dgv) { IList<T> list = null; if (dgv != null) { list = new List<T>(); T obj = default(T); obj = Activator.CreateInstance<T>(); foreach (DataGridViewColumn dgvc in dgv.Columns) { PropertyInfo prop= obj.GetType().GetProperty(dgvc.DataPropertyName); if (prop == null) { continue; } foreach (DataGridViewRow dgvr in dgv.SelectedRows) { var dgvrModel = dgvr.Cells[dgvc.Name].Value; object value = (dgvrModel.GetType() == typeof(DBNull)) ? null : dgvrModel; //非泛型 if (!prop.PropertyType.IsGenericType) value = string.IsNullOrEmpty(value + "") ? null : Convert.ChangeType(value, prop.PropertyType); else//泛型 { Type genericTypeDefinition = prop.PropertyType.GetGenericTypeDefinition(); if (genericTypeDefinition == typeof(Nullable<>)) { value = string.IsNullOrEmpty(value + "") ? null : Convert.ChangeType(value, Nullable.GetUnderlyingType(prop.PropertyType)); } } if (prop.CanWrite) //判斷其是否可寫 prop.SetValue(obj, value, null); } } list.Add(obj); } return list; }