/// <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>();
                foreach (DataGridViewRow dgvr in dgv.SelectedRows)
                {
                    
                    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; }

                        var dgvrModel = dgvr.Cells[dgvc.Name].Value;
                        object value = null;
                        if (dgvrModel != null)
                        {
                            value = 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;
}

C# Winform 下 DataGridView 行(SelectedRows)转 模型 Model的更多相关文章

  1. 关于Winform下DataGridView中实现checkbox全选反选、同步列表项的处理

    近期接手一个winform 项目,虽然之前有.net 的经验,但是对一些控件的用法还不是很熟悉. 这段时间将会记录一些在工作中遇到的坎坷以及对应的解决办法,写出来与大家分享并希望大神提出更好解决方法来 ...

  2. C#实现WinForm下DataGridView控件的拷贝和粘贴

    DataGridView控件应该是数据库应用系统最常用的控件之一,其方便性不言而喻的.往往用户在使用过程中会提出"从DataGridView空间 中拷贝数据或是向某个DataGridView ...

  3. WinForm Control - DataGridView

    http://blog.csdn.net/fangxing80/article/details/1561011 .NET 2.0 - WinForm Control - DataGridView 编程 ...

  4. Winform下CefSharp的引用、配置、实例与报错排除(源码)

    Winform下CefSharp的引用.配置.实例与报错排除 本文详细介绍了CefSharp在vs2013..net4.0环境下,创建Winfrom项目.引用CefSharp的方法,演示了winfro ...

  5. WinForm中DataGridView显示更新数据--人性版

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  6. c# WinForm开发 DataGridView各种操作总结大全

    一.单元格内容的操作 //取得当前单元格内容 Console.WriteLine(DataGridView1.CurrentCell.Value); // 取得当前单元格的列 Index Consol ...

  7. c# WinForm开发 DataGridView控件的各种操作总结(单元格操作,属性设置)

    一.单元格内容的操作 *****// 取得当前单元格内容 Console.WriteLine(DataGridView1.CurrentCell.Value); // 取得当前单元格的列 Index ...

  8. 转:c# WinForm开发 DataGridView控件的各种操作总结(单元格操作,属性设置)

    一.单元格内容的操作 *****// 取得当前单元格内容 Console.WriteLine(DataGridView1.CurrentCell.Value); // 取得当前单元格的列 Index  ...

  9. winform中dataGridView隔行显示不同的背景色,鼠标移动上显示不同颜色,离开后变回原色

    winform中dataGridView隔行显示不同的背景色,鼠标移动上显示不同颜色,离开后变回原色 先设置奇数行颜色,这个有个自带的属性AlternatingRowsDefaultCellStyle ...

  10. 【接上一篇】winform中dataGridView高度和宽度自适应填充完数据的高度和宽度,即dataGridView根据数据自适应大小

    上一篇:winform中dataGridView高度自适应填充完数据的高度 winform中dataGridView高度自适应填充完数据的高度,就是dataGridView自身不产生滚动条,自己的高度 ...

随机推荐

  1. Oracle 11G R2 安装图解

    个人学习需要,在Windows Server 2008 R2 上安装 Oracle 11G R2 Tips:需要下载2个文件,file1和file2 解压后需要合并到同一个文件夹下才能正常安装(这里就 ...

  2. Python科学计算系列5—导数

    1.一元函数的导数 例1:求下列函数的导数 例2:求下列函数的50阶导数 代码如下: from sympy import * x = symbols('x') f1 = diff(tan(x)) f2 ...

  3. 🎀idea-java序列化serialversionUID自动生成

    简介 java.io.Serializable 是 Java 中的一个标记接口(marker interface),它没有任何方法或字段.当一个类实现了 Serializable 接口,那么这个类的对 ...

  4. jmeter从文档CSV内读取参数且文件路径为相对路径

    如下图,"全站链接扫描"脚本的参数化文件存储在同一目录的参数化文件夹内 预计实现读取该文件使用相对路径(非绝对路径,避免脚本在另一台电脑存在别的目录下能正常读取参数文件) 如读取& ...

  5. React AntD的Dropdown组件报错:React.Children.only expected to receive a single React element child.可能的n原因

    React.Children.only expected to receive a single React element child. Error: React.Children.only exp ...

  6. [笔记]PHP里类的申明和对象的实例化(笔记)

    1.申明类 class 类名{  //属性----------  public 属性 = 值:  public 属性:  //方法-----------  function 方法名($n1,$n2){ ...

  7. 在我用了几个月VSCode的C++及其衍生功能后的感受

    VSCode优点槽点大盘点 优点 衍生功能是真的多,几乎所有功能在扩展市场里面都能得到.而且无需配置环境啊 自定义功能是真的方便,可以自定义.exe存放位置或者名称,打下;键就能够一键美化代码等等 美 ...

  8. 数据结构之位图(bitmap、RoaringMap)

    参照资料: 1.https://www.bilibili.com/video/BV1u44y1g7Ps(bitmap) 2.https://b23.tv/cQtuFOx (RoaringMap) 3. ...

  9. Spring基于XML AOP事务控制

    Spring基于XML AOP事务控制 源码 代码测试 pom.xml <?xml version="1.0" encoding="UTF-8"?> ...

  10. 堆叠、MLAG、VPC、VSS 技术对比及架构建议

    堆叠.MLAG.VPC.VSS 技术对比及架构建议 1. 堆叠(Stacking) 技术实现: 多台物理设备通过专用堆叠线缆(如华为的Stack.华三IRF.思科StackWise)或普通光纤/以太网 ...