程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> WinForm DataGridView 綁定泛型List(List<T>)/ArrayList不顯示的原因和解決,arraylist泛型

WinForm DataGridView 綁定泛型List(List<T>)/ArrayList不顯示的原因和解決,arraylist泛型

編輯:C#入門知識

WinForm DataGridView 綁定泛型List(List<T>)/ArrayList不顯示的原因和解決,arraylist泛型


背景:無意間遇到了一個不大不小的問題,希望對一些遇到的人有所幫助!

一、問題

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 的數據源綁定只能是被公開了的屬性,而無權訪問字段。很多其他控件也有同樣的情況。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved