你的位置:首页 > 软件开发 > ASP.net > WinForm DataGridView 绑定泛型List(ListT)/ArrayList不显示的原因和解决

WinForm DataGridView 绑定泛型List(ListT)/ArrayList不显示的原因和解决

发布时间:2016-09-05 16:00:03
背景:无意间遇到了一个不大不小的问题,希望对一些遇到的人有所帮助! 一、问题 WinForm DataGridView 绑定泛型List (List<T>)/ArrayList不显示,UI 代码如下: using System;using System.Collec ...

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

一、问题

WinForm Dataget='_blank'>GridView 绑定泛型List (List<T>)/ArrayList不显示,UI

WinForm DataGridView 绑定泛型List(ListT)/ArrayList不显示的原因和解决

代码如下:

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(ListT)/ArrayList不显示的原因和解决

关键词:GridView

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。