WinForm DataGridView 绑定泛型List(List<T>)/ArrayList不显示的原因和解决
来源:互联网 发布:visio linux 编辑:程序博客网 时间:2024/05/20 04:13
背景:无意间遇到了一个不大不小的问题,希望对一些遇到的人有所帮助!
一、问题
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 的数据源绑定只能是被公开了的属性,而无权访问字段。很多其他控件也有同样的情况。
阅读全文
0 0
- WinForm DataGridView 绑定泛型List(List<T>)/ArrayList不显示的原因和解决
- 数组、ArrayList、List<T>区别和选择
- List<T>的搜索和排序
- winform DataGridView绑定List<T>类型数据
- 泛型List<T>与非泛型ArrayList
- List<T> 直接绑定到datagridview上不显示数据.
- List<T>排序
- winform技巧—List<T>绑定datagridview控件
- 【泛型】使用List<T>篇
- json转换成list<T>
- C# winform开发datagridview绑定List泛型问题
- winform DataGridView 绑定匿名List
- C#泛型列表List<T>基本用法总结
- ArrayList和List<T>
- Winform中DataGridView绑定List<T>数据源时,点击DataGridView列头不能自动排序解决方法
- C#中DataTable转化为List<T>解析
- DataGridView绑定List<T>,出现IndexOutOfRangeException异常
- 一个Thiking泛型的例子,突然发现理解了List<String>的原理
- SRM552 Div1Medium FoxAndFlowerShopDivOne
- C# 将类的内容写成JSON格式的字符串
- C# JSON格式的字符串读取到类中
- 自己总结下颜色表
- python 语法细节
- WinForm DataGridView 绑定泛型List(List<T>)/ArrayList不显示的原因和解决
- Windows7安装JDK的环境变量设置javac不是内部命令或外部命令
- [zz]使用OleDb,将Excel导入DataSet
- [zz]winform导入excel
- JS中return的用法及return;return false;return true的区别
- 【阿柟的复习计划】暑假要做些什么?
- C#对多个集合和数组的操作(合并,去重,判断)
- Java官方教程
- Java8 jvm参数简介