DataGridView是一个数据绑定控件.现在说下DataGridView和SqlDataReader相结合的用法....
因为SqlDataReader是一条一条的读取数据的,不能直接把read()到的一条结果放到DataGridView中,所以就需要把read到的所有结果放到一个集合中.比如dataset ,datatable,list等.这里推荐使用list.因为dataset和datatable都是弱类型的,而list集合相对是强类型的.
用类做List的参数是比较合适的
例子(查询tblperson表中的数据):
申明类Person
class Person
{
//数据绑定的时候只绑定属性,不绑定字段
public int autoId { get; set; }
public string uname { get; set; }
public int uage { get; set; }
public int uheight { get; set; }
}
private void button1_Click(object sender, EventArgs e)
{
List<Person> list=new List<Person>();
string connstr = "data source=.;initial catalog=itcast2013;integrated security=true";
using (SqlConnection conn = new SqlConnection(connstr))
{
string sqlstr = "select * from tblperson";
using (SqlCommand comd = new SqlCommand(sqlstr, conn))
{
conn.Open();
using (SqlDataReader rd = comd.ExecuteReader())
{
if (rd.HasRows)
{
while (rd.Read())
{
//先把表中数据存数到"集合".-->放到list<>中
Person model = new Person();
//创建一个Person类来存放每条数据 注意:在创建Person类的时候一定要把每列都申明成属性而不是字段..因为在数据绑定的时候只绑属性,不绑字段
model.autoId = rd.GetInt32(0);
model.uname = rd.IsDBNull(1) ? "" :rd.GetString(1);
model.uage = rd.IsDBNull(2) ?-1 :rd.GetInt32(2);
//在使用Getxxx来获取列数据的时候不能有空值.所以要通过isdbnull来进行一个判断(三元表达式)
model.uheight = rd.IsDBNull(3) ? -1 :rd.GetInt32(3);
list.Add(model);
//将Person类的一个对象model传给list集合
}
}
}
}
}
this.dataGridView1.DataSource = list;
}