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

一、问题

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

代码如下:

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.OleDb;
using System.IO;
using System.Windows.Forms; namespace WindowsFormsApplication1
{
public delegate T BorrowReader<out T>(IDataReader reader); public partial class FormMain : Form
{
public FormMain()
{
InitializeComponent(); } private List<User> GetUsers(IDataReader reader)
{
var list = new List<User>();
while (reader.Read())
{
list.Add(new User()
{
ID = reader.GetInt32(reader.GetOrdinal("ID")),
UserName = reader.GetString(reader.GetOrdinal("UserName")),
NickName = reader.GetString(reader.GetOrdinal("NickName")),
Phone = reader.GetString(reader.GetOrdinal("Phone")),
QQ = reader.GetString(reader.GetOrdinal("QQ")),
});
}
return list;
} private void btnTest_Click(object sender, EventArgs e)
{
dataGridView1.AutoGenerateColumns = false;
var list = MyDb.LendReader("select * from Users where 0=0", GetUsers);
dataGridView1.DataSource = list;
}
} public class User
{
public int ID;
public string UserName;
public string NickName;
public string Phone;
public string QQ; } public class MyDb
{
public static T LendReader<T>(string sql, BorrowReader<T> borrowReader)
{
using (OleDbConnection connection = CreateConnection())
{
connection.Open();
OleDbCommand c = new OleDbCommand(sql, connection);
OleDbDataReader r = c.ExecuteReader();
return borrowReader(r);
}
} private static OleDbConnection CreateConnection()
{
string dbName = Path.Combine(Application.StartupPath, "MyData.mdb");
OleDbConnection c = new OleDbConnection
{
ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + dbName
};
return c;
}
}
}
二、解决方法

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

只要改代码:

    public class User
{
public int ID;
public string UserName;
public string NickName;
public string Phone;
public string QQ;
}

为:

    public class User
{
public int ID{ get; set; }
public string UserName { get; set; }
public string NickName { get; set; }
public string Phone { get; set; }
public string QQ { get; set; }
}

就好了

三、简单讲解

没定义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. 后端获取前端的多个数据用getlist

    authors = request.POST.getlist("authors") print(authors)  得到一串作者的名字

  2. 如何基于 Nacos 和 Sentinel ,实现灰度路由和流量防护一体化

    基于Alibaba Nacos和Sentinel,实现灰度路由和流量防护一体化的解决方案,发布在最新的 Nepxion Discovery 5.4.0 版,具体参考: 源码主页,请访问 源码主页指南主 ...

  3. H5项目(基于vue框架)常见问题及注意事项

    参考: https://blog.csdn.net/u012377333/article/details/52326158 1.前端中所有的按钮,点击后发送报文的标签,都必须加上 去重功能.防止重复发 ...

  4. JavaScript笔记(第一章,第二章)

    JavaScript笔记(第一章,第二章) 第一章: <meta http-equiv="Content-Type" content="text/html; cha ...

  5. debian 8 安装 codeblocks

    CodeBlocks优点: 1.所占资源少,对电脑硬件的要求低 2.开源软件,可以查看源代码,虽然我不会修改,但是如果我做一个IDE的话,我一定会参考这个伟大的软件的. 3.最重要的是,它完全跨了三大 ...

  6. Linux内核知识杂记

    1.内核调试手段 1.printk打印内核状态 2.产生opps时使用GDB查看调用栈 2.内核空间和用户空间区别,通信方式有哪些? Linux简化了分段机制,使得虚拟地址与线性地址总是一致,因此,L ...

  7. Linux Kernel Development有关内存管理

    1 Pages Page的概念来源为处理器Processor的部件MMU(Memory Management Unit),MMU通过设置好的页表(通过设置CR3寄存器,指向页目录所在的物理内存)对内存 ...

  8. Vim多窗口编辑

    在Linux中使用vim编辑多个窗口     方式:            1. vim -o file1 file2             打开的两个文件上下窗口分布 比如当前目录有makefil ...

  9. javascript 学习犯错记录

    看w3c学习js,有时按自己想法来,会出一些莫名奇妙的错误,而这些问题百度到了,但因为学习原因基础不捞,导致看到了答案,却认为这不是答案 1.一个很简单的 一个html,一个js文件 我想在js中的b ...

  10. usb-host与外设之间的通信(一)

    迫于需要开始一个app实现安卓手机控制外设,要学习一下usb-host这方面的知识,所以记录一下自己的学习经历.关于usb-host这一块的资料国内还是比较少的,我只能学到哪里就记录到哪里了. 简单来 ...