作者:永恒多一天_313 | 来源:互联网 | 2023-10-11 12:10
背景:无意间遇到了一个不大不小的问题,希望对一些遇到的人有所帮助!一、问题WinFormDataGridView绑定泛型List(List)ArrayList不显示,UI代码如下:
背景:无意间遇到了一个不大不小的问题,希望对一些遇到的人有所帮助!
一、问题
WinForm DataGridView 绑定泛型List (List)/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(string sql, BorrowReader 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 的数据源绑定只能是被公开了的属性,而无权访问字段。很多其他控件也有同样的情况。
)/ArrayList不显示的原因和解决,mamicode.com" target="_blank">WinForm DataGridView 绑定泛型List(List)/ArrayList不显示的原因和解决