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;
}