使用DataReader的DataGridView






3.12/5 (18投票s)
如何在Win App中填充DataReader的DataGridView
引言
我经常被问到的一个问题是,如何使用 DataReader 填充 dataGridview。 如果你注意 DataReader 的行为,你会发现当你使用 DataReader 读取时,你是逐行读取的,所以你需要循环读取所有记录,如果你想显示所有记录或记录中的任何元素。 另一方面,dataGridview 需要一次性获取所有记录的数据。 因此,解决方案是创建一个中心存储,通过创建一个包含属性的类,并在读取每条记录的值时为每个属性设置值,并将创建的类的每个对象存储在 ArrayList 中。 这样,ArrayList 将代表你的存储。
Using the Code
步骤 1:创建一个包含属性的类
public class MyDetails
    {
        private int age;
        public int Age
        {
            get { return age; }
            set { age = value; }
        }
        private string name;
        public string Name
        {
            get { return name; }
            set { name = value; }
        }
        private int id;
        public int Id
        {
            get { return id; }
            set { id = value; }
           } 
        }
步骤 2:创建一个 ArrayList 来表示你的存储
ArrayList sequence = new ArrayList();
步骤 3:当你检索数据时,执行以下操作
 while (reader.Read())
                {
                    MyDetails m = new MyDetails();
                    m.Id = (int)reader[0];
                    m.Name = reader[1].ToString();
                    m.Age = (int)reader[2];
                    sequence.Add(m);
                }
                dataGridView1.DataSource = sequence;
最终代码
 SqlConnection sqlCon = null;
            try
            {
                sqlCon = new SqlConnection();
                sqlCon.ConnectionString = "Your Connection String";
                SqlCommand cmd = new SqlCommand();
                cmd.Connection = sqlCon;
                cmd.CommandText = "SELECT * FROM StudentInfo";
                sqlCon.Open();
                SqlDataReader reader = cmd.ExecuteReader();
                while (reader.Read())
                {
                    MyDetails m = new MyDetails();
                    m.Id = (int)reader[0];
                    m.Name = reader[1].ToString();
                    m.Age = (int)reader[2];
                    sequence.Add(m);
                }
                dataGridView1.DataSource = sequence;
            }
            finally
            {
                sqlCon.Close();
            }

