(与随笔 DataGridView动态绑定combox列,checkbox列(仿照老大的代码自己写的一个小例子供自己以后参考) (2013-04-02 11:14 相关) )
查询数据库,每一条数据是一个对象,返回一个List<object>,将查询到的多个对象放到List<object>中,将该List绑定到Datagridview中。
数据库查询,将每条记录通过反射写入一个对象代码如下(注意数据库和类的相应字段的名称需要一致):
View Code
#region /// <summary> /// 得到所有数据列表 利用了反射,所以要求类的属性名称必须和数据库中的相应字段名称相同 /// </summary> /// <param name="SQL"></param> /// <returns></returns> public static List<object> GetAll(Object obj, string SQL) { List<object> oneList = new List<object>();//定义一个对象list Type objtype = obj.GetType();//获取指定名称的类型 object entity = Activator.CreateInstance(objtype, null);//创建指定类型实例 PropertyInfo[] fields = entity.GetType().GetProperties();//获取指定对象的所有公共属性 using (SqlConnection con = GetCon()) { try { //从数据库选取数据集 if (con.State == ConnectionState.Closed) { con.Open(); } #region 测试存储过程用 ///调用存储过程 //SqlCommand cmd = new SqlCommand("proc_findStudentByName", con); //cmd.CommandType = CommandType.StoredProcedure; //cmd.Parameters.Clear(); //cmd.Parameters.AddWithValue("@name", "%石%"); //cmd.Parameters.AddWithValue("@nextName", "%"); ////string a= cmd.ExecuteScalar().ToString(); //SqlDataReader dr1 = cmd.ExecuteReader(); //DataTable dt1 = new DataTable(); //dt1.Load(dr1); //for (int i = 0; i < dt1.Rows.Count; i++) //{ // for (int j = 0; j < dt1.Columns.Count; j++) // { // string str = dt1.Rows[i][j].ToString(); // } //} //// #endregion SqlDataAdapter da = new SqlDataAdapter(SQL, con); DataSet ds = new DataSet();//创建DataSet实例 da.Fill(ds, "Table"); DataTable dt= ds.Tables["Table"]; ///// ////通过反射动态给实体属性赋值 foreach (DataRow dr in dt.Rows) { object oneObject = Activator.CreateInstance(objtype, null);//创建指定类型实例 foreach (DataColumn dc in dt.Columns) { foreach (PropertyInfo t in fields) { if (dc.ColumnName == t.Name) { t.SetValue(oneObject, dr[dc.ColumnName], null);//给对象赋值 break; } } } oneList.Add(oneObject);/////将一个实体对象放入List } } catch { } } return oneList; } #endregion
调用时,需要定义你需要的对象,定义你需要的sql语句,然后调用该方法,返回一个List<object>对象,把它绑定到DGV(datagridview)上。
string sql = "select * from TB_Student";//你需要的sql语句 Student stu = new Student();//定义对象 DGV.DataSource = DALStudent.GetAll(stu, sql);//调用