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

摘要:
许多其他控件也是如此。
背景:无意间遇到了一个不大不小的问题,希望对一些遇到的人有所帮助!
一、问题

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

clipboard

代码如下:

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&amp;lt;T&amp;gt;)/ArrayList不显示的原因和解决》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Winform开发框架之单据窗体生成(主从表,流水单号)查看 Apache并发请求数及其TCP连接状态下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

4.14

public class tea { private int uid; private String uname; private String upass; //访问器 public int getUid() { return uid; } public void setUi...

loadrunner之WebServices协议脚本编写(三种请求模式)

以天气预报网站为例:http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl   一、web_service_call模式 步骤如下:   经过增加事务和if 判断的脚本如下: Action() { lr_start_transaction("获取天气预报"...

C#(winform)的label自动换行

Label是没有自动换行属性的,不像Textbox有WordWrap属性 尽管没有自动换行的属性,但也能够自动换行, 首先AutoSize改成false; 然后调整Label的大小,长和宽 (也就是说Label的面积是固定的,只要内容不超过label的面积,内容就可以实现自动换行 缺点:占用比较多的位置,尽管有时内容仅有一行)...

文件重命名(递归)

假设需要写入日志文件,但是不希望日志文件太大影响程序性能,这时需要将原文件重命名 //判断文件是否大于10M //取得文件大小 if (File.Exists(logpath)) { FileInfo MyFileInfo = new FileInfo(...

Oracle中对列加密的方法

Oracle中对列加密的方法 2011-12-22 17:21:13 分类: Linux Oracle支持多种列加密方式: 1,透明数据加密(TDE):create table encrypt_col(id int,txt varchar2(100) encrypt using '算法名称' identified by '密钥' no salt);优...

andoird软件开发之一个记录账号密码的APP--bmob后台

1.app功能:通过注册登录账户,拥有一个账户本,能够将平时自己容易的忘记的账户记录下来,并可以保持到云端,不需要担心数据丢失,只要登录账户,便可获取到自己的账户本。 2.实现的效果图,如下: 以下界面分别为注册界面、登录界面、提交账户内容界面、账户列表界面、长按删除账户信息、具体账户内容信息 3.实现的工程目录如下: 4.实现的具体过程: a.布局...