/// <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. Ubuntu 分辨率设置不了

    最近换了个显示器,Ubuntu下竟然只能显示低分辨率,瞬间zhuo ji了,解决,留爪. 问题就不多说了,直接记录正题, 主要涉及2个命令cvt和xrandr, 主要注意的一点是:刚刚开始直接用命令写 ...

  2. 团队项目:杰杰Bond团队成员介绍

    项目 内容 这个作业属于哪个课程 2025年春季软件工程(罗杰.任健) 这个作业的要求在哪里 [T.1] 团队项目:团队成员介绍 我在这个课程的目标是 学习软件工程相关知识,培养编程和团队协作能力,做 ...

  3. vue2&vue3&小程序简介

    Vue2.Vue3.小程序页面生命周期详解 本篇将对比 Vue2.Vue3 以及小程序页面/组件的生命周期,简单梳理各自特点.差异.新增优化点. Vue2 生命周期 beforeCreate → cr ...

  4. hybrid应用自动化

    一.hybrid介绍 hybrid是一种混合app,将h5页面嵌入native原生页面. 基于uiautomator+chromedriver.native部分走uiautomator,web部分走c ...

  5. base的含义及使用及与this的区别

    C#中base关键字的几种用法 - bobob - 博客园 (cnblogs.com) C#构造函数里的base和this的区别 - 傲世狂枫 - 博客园 (cnblogs.com) 我的理解 1.在 ...

  6. jdk源码目录说明

  7. 第二章 Spring Boot 整合 Kafka消息队列 生产者

    ​ 系列文章目录 第一章 Kafka 配置部署及SASL_PLAINTEXT安全认证 第二章  Spring Boot 整合 Kafka消息队列 生产者 第三章  Spring Boot 整合 Kaf ...

  8. 遇到的问题之“list的addAll()报空指针异常”

    一.错误图 java.lang.NullPointerException at java.util.ArrayList.addAll(ArrayList.java:581) at com.bessky ...

  9. 运筹学之"名词解释"

    1.转移概率 转移概率是指某个销售者保持,获得或失去消费者的概率 2.阶石法中的改进指数 阶石法中的改进指数是指循着改进路线,当货物的运输量作为一个单位发生变化时,会引起总运输费用的改变 3.相关关系 ...

  10. CI框架–头信息,构造器,视图

    今天继续学习CI框架的相关知识,分析下面语句,将匹配到的用户,Location跳转至相应界面,header()函数用来向客户端发送原始HTTP报头. `if ($this->user ['uid ...