首页 > 代码库 > 数据源控件

数据源控件

数据绑定:

【1】手动查找数据
(1).获得数据一般要是一个集合
(2).把这个集合赋给控件的DataSource属性-----对于CS,只需要前两步就可以完成数据的绑定
(3).执行这个空间的DataBind()方法。

【2】使用数据源控件

(1).对于数据源控件上的【SELECT】所有数据-----GetModelList()方法,默认是传参NULL,但是东软生成的代码有点缺陷,所以得将其在DAL的方法进行修改:

 1         /// <summary> 2         /// 获得所有数据列表 3         /// </summary> 4         public DataSet GetList(string strWhere) 5         { 6             StringBuilder strSql = new StringBuilder(); 7             strSql.Append("select TypeId,TypeName,Price,AddBed,BedPrice,Remark "); 8             strSql.Append(" FROM RoomType "); 9             if (strWhere != null && strWhere.Trim() != "")10             {11                 strSql.Append(" where " + strWhere);12             }13             return DbHelperSQL.Query(strSql.ToString());14         }

-------------------PS:其中这一句  if (strWhere != null && strWhere.Trim() != "") 是将其未考虑到的情况加入!!

(2).使用数据源控件【删除】操作时会报错,是因为【ObjectDataSource】的【DataObjectTypeName】属性默认的设置为 Model.RoomType,即在执行【查询】【更新】【删除】操作时,传的参数都是Model模型,不能只传 int 类型的 TypeId .!!

所以,应对错误的解决方案为:重载一个传Model的方法 Delete(Model.RoomType model):

 1         /// <summary> 2         /// 删除一条数据 3         /// 重载了下面那个删除方法,并且调用了下面那个删除方法 4         /// </summary> 5         public bool Delete(Model.RoomType model) 6         { 7             return Delete(model.TypeId); 8         } 9 10         /// <summary>11         /// 删除一条数据12         /// </summary>13         public bool Delete(int TypeId)14         {15             16             return dal.Delete(TypeId);17         }

-----------------PS:此时点击【删除】事件还是会犯错,这是因为没有指定控件 【GridView】 的 【DataKeyNames】属性-----------DataKeyNames="TypeId",这样就OK

 

----------------PS:对于无用的 ID 列可以进行隐藏,不让用户看到!!!!此时无影响

-------------------------------------------------------------------------------------------------------------------------------------------------------------------

以GridView【更新】为例介绍几个事件发生的先后顺序:

1).GridView控件的GridView1_RowUpdating()--------------此时参数 e 中是零散的 Model 的个属性的值
2).数据源控件的ods_Updating()------------------------此时参数 e 中是一个 Model 模型,是将上一步中的各个零散的属性值组合起来的
  (前两个事件,由于是在调用【更新】代码之前触发的,所以可以对用户更新的数据进行校验或修改)
3).调用了业务逻辑层的【更新】方法(处理更新)
4).数据源控件的GridView1_RowUpdated()
5).控件的ods_Updated()
  (后两个方法,可以通过判断e.Exception是否为空,来判断在程序的第3步执行中有没有发生异常,e.ExceptionHandled---表示在程序中处理更新操作过程中引发的异常已被处理)

 1         /// <summary> 2         /// 第一个处理 3         /// </summary> 4         /// <param name="sender"></param> 5         /// <param name="e"></param> 6         protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e) 7         { 8             //TODO:可以对用户更新的数据进行校验或修改 9 10             //此时参数 e 中是零散的 Model 的个属性的值11         }12 13         /// <summary>14         /// 第二个处理15         /// </summary>16         /// <param name="sender"></param>17         /// <param name="e"></param>18         protected void ods_Updating(object sender, ObjectDataSourceMethodEventArgs e)19         {20             //TODO:可以对用户更新的数据进行校验或修改21 22             //此时参数 e 中是一个 Model 模型,是将上一步中的各个零散的属性值组合起来的23         }24 25         /// <summary>26         /// 第三个处理27         /// </summary>28         /// <param name="sender"></param>29         /// <param name="e"></param>30         protected void GridView1_RowUpdated(object sender, GridViewUpdatedEventArgs e)31         {32             if (e.Exception != null)33             {34                 //作异常的处理35                 Maticsoft.Common.MessageBox.Show(this, "更新时出错!");36 37                 //设为True,表示在程序中处理更新操作过程中引发的异常已被处理。38                 e.ExceptionHandled = true;39             }40 41         }42 43         /// <summary>44         /// 第四个处理45         /// </summary>46         /// <param name="sender"></param>47         /// <param name="e"></param>48         protected void ods_Updated(object sender, ObjectDataSourceStatusEventArgs e)49         {50             //TODO:可以通过判断e.Exception是否为空,来判断在程序的第3步执行中有没有发生异常51         }

 

数据源控件