背景:无意间遇到了一个不大不小的问题,希望对一些遇到的人有所帮助!

一、问题

WinForm DataGridView 绑定泛型List (List<T>)/ArrayList不显示,UI

代码如下:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Data;
  4. using System.Data.OleDb;
  5. using System.IO;
  6. using System.Windows.Forms;
  7.  
  8. namespace WindowsFormsApplication1
  9. {
  10. public delegate T BorrowReader<out T>(IDataReader reader);
  11.  
  12. public partial class FormMain : Form
  13. {
  14. public FormMain()
  15. {
  16. InitializeComponent();
  17.  
  18. }
  19.  
  20. private List<User> GetUsers(IDataReader reader)
  21. {
  22. var list = new List<User>();
  23. while (reader.Read())
  24. {
  25. list.Add(new User()
  26. {
  27. ID = reader.GetInt32(reader.GetOrdinal("ID")),
  28. UserName = reader.GetString(reader.GetOrdinal("UserName")),
  29. NickName = reader.GetString(reader.GetOrdinal("NickName")),
  30. Phone = reader.GetString(reader.GetOrdinal("Phone")),
  31. QQ = reader.GetString(reader.GetOrdinal("QQ")),
  32. });
  33. }
  34. return list;
  35. }
  36.  
  37. private void btnTest_Click(object sender, EventArgs e)
  38. {
  39. dataGridView1.AutoGenerateColumns = false;
  40. var list = MyDb.LendReader("select * from Users where 0=0", GetUsers);
  41. dataGridView1.DataSource = list;
  42. }
  43. }
  44.  
  45. public class User
  46. {
  47. public int ID;
  48. public string UserName;
  49. public string NickName;
  50. public string Phone;
  51. public string QQ;
  52.  
  53. }
  54.  
  55. public class MyDb
  56. {
  57. public static T LendReader<T>(string sql, BorrowReader<T> borrowReader)
  58. {
  59. using (OleDbConnection connection = CreateConnection())
  60. {
  61. connection.Open();
  62. OleDbCommand c = new OleDbCommand(sql, connection);
  63. OleDbDataReader r = c.ExecuteReader();
  64. return borrowReader(r);
  65. }
  66. }
  67.  
  68. private static OleDbConnection CreateConnection()
  69. {
  70. string dbName = Path.Combine(Application.StartupPath, "MyData.mdb");
  71. OleDbConnection c = new OleDbConnection
  72. {
  73. ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + dbName
  74. };
  75. return c;
  76. }
  77. }
  78. }
二、解决方法

其实很简单,只是很多朋友可能没有考虑到,因为这压根不是什么泛型List或者ArrayList的问题,

只要改代码:

  1. public class User
  2. {
  3. public int ID;
  4. public string UserName;
  5. public string NickName;
  6. public string Phone;
  7. public string QQ;
  8. }

为:

  1. public class User
  2. {
  3. public int ID{ get; set; }
  4. public string UserName { get; set; }
  5. public string NickName { get; set; }
  6. public string Phone { get; set; }
  7. public string QQ { get; set; }
  8. }

就好了

三、简单讲解

没定义get、set的是字段,定义了就是属性了,为了安全性考虑,DataGridView 的数据源绑定只能是被公开了的属性,而无权访问字段。很多其他控件也有同样的情况。

[转]WinForm DataGridView 绑定泛型List(List<T>)/ArrayList不显示的原因和解决的更多相关文章

  1. WinForm DataGridView 绑定泛型List(List<T>)/ArrayList不显示的原因和解决

    背景:无意间遇到了一个不大不小的问题,希望对一些遇到的人有所帮助! 一.问题 WinForm DataGridView 绑定泛型List (List<T>)/ArrayList不显示,UI ...

  2. winform datagridview 绑定泛型集合变得不支持排序的解决方案

    原文:winform datagridview 绑定泛型集合变得不支持排序的解决方案 案例: 环境:Winform程序 控件:Datagridview 现象:Datagridview控件绑定到List ...

  3. DataGridView绑定泛型List时,利用BindingList来实现增删查改

    DataGridView绑定泛型List时,利用BindingList来实现增删查改  一.   DataGridView绑定泛型List的种种 1.DataGridView数据绑定对比(DataTa ...

  4. [WinForm] DataGridView 绑定 DT && ComboBox 列绑定 Dict

    一  需求介绍 一般像枚举类型的数据,我们在数据库里存储着诸如(1.2.3.4-)或者("001"."002"."003"-)此类,但是界面 ...

  5. DataGridview 绑定泛型List<T>

    .DataGridView数据绑定对比(DataTable与泛型List): 当DataGridView的DataSource是DataTable的时候,DataTable的数据改变时,DataGri ...

  6. [转]DataGridView绑定泛型List的种种

    1.DataGridView数据绑定对比(DataTable与泛型List):当DataGridView的DataSource是DataTable的时候,DataTable的数据改变时,DataGri ...

  7. C# winform DataGridView 绑定数据的的几种方法

    1.用DataSet和DataTable为DataGridView提供数据源 String strConn = "Data Source=.;Initial Catalog=His;User ...

  8. C# Winform中DataGridView绑定后DataGridViewCheckBoxColumn无法显示的问题

    在控件DataGridView绑定数据源后,发现DataGridViewCheckBoxColumn不能显示当前的check值.经过一番努力,现将完整代码奉献出来,仅供参考. 错误代码: /*禁止自动 ...

  9. winform datagridview在添加全选checkbox时提示:不能设置 selected 或 selected 既不是表 Table 的 DataColumn 也不是 DataRelation。

    在项目中,需要多选功能,于是在datagridview添加了一列DataGridViewCheckBoxColumn 在给datagridview绑定完数据集之后,对全选进行操作的时候,发现总报错,报 ...

随机推荐

  1. C#中ArrayList 、Array与、string、string[]数组的相关转换

    一.ArrayList 与 string.string[]数组的转换 1.ArrayList 转换为 string[] : ArrayList list = new ArrayList(); list ...

  2. Shiro学习(3)授权

    授权,也叫访问控制,即在应用中控制谁能访问哪些资源(如访问页面/编辑数据/页面操作等).在授权中需了解的几个关键对象:主体(Subject).资源(Resource).权限(Permission).角 ...

  3. docker 网络和/etc/docker/daemon.json文件详情

    /etc/docker/daemon.json(没有就创建) [root@master ~]# /etc/docker/deamon.json { "registry-mirrors&quo ...

  4. Zookeeper集群介绍及其搭建

    1 Zookeeper集群简介 1为什么搭建Zookeeper集群 大部分分布式应用需要一个主控.协调器或者控制器来管理物理分布的子进程.目前,大多数都要开发私有的协调程序,缺乏一个通用机制,协调程序 ...

  5. [NOIP模拟测试3] 建造游乐园 题解(欧拉图性质)

    Orz 出题人石二队爷 我们可以先求出有n个点的联通欧拉图数量,然后使它删或增一条边得到我们要求的方案 也就是让它乘上$C_n^2$ (n个点里选2个点,要么删边要么连边,选择唯一) 那么接下来就是求 ...

  6. php开发面试题---游戏面向对象设计与分析实例

    php开发面试题---游戏面向对象设计与分析实例 一.总结 一句话总结: 不要光空想,多看几个实例就知道自己的游戏该怎么设计了 根据实例去理解面向对象编程的的六大原则 1.英雄种类分别有:战士.法师. ...

  7. 数据科学工作者(Data Scientist) 的日常工作内容包括什么

    数据科学工作者(Data Scientist) 的日常工作内容包括什么 众所周知,数据科学是这几年才火起来的概念,而应运而生的数据科学家(data scientist)明显缺乏清晰的录取标准和工作内容 ...

  8. 10. Tasks and functions

    Frm: IEEE Std 1364™-2001, IEEE Standard Verilog® Hardware Description Language 10. Tasks and functio ...

  9. VC++ 2010 创建高级Ribbon界面详解(1)

    运用 VC++ 2010 创建高级 Ribbon 界面详解,包括 Ribbon 界面的结构层次.Ribbon 控件的使用等,ribbon 用户界面,ribbon interface ,ribbon 高 ...

  10. JS中的事件、数组、节点对象处理

    在JS代码中编写事件一定要保证页面在浏览器中加载时会把事件加载进页面 事件:在代码中可以通过一个动作来触发另一个行为的总称 A:事件的编写方式1 HTML标签中添加 onxxxx = "函数 ...