页面(下文称父页面)实现功能是对多地用户的操作,具体如下:点击按钮,弹出有树状地区的模式对话框供选择,选择完地区返回后父页面立即显示出该地区的用户,之后对用户进行操作。
实现思路:父页面上放GridView,SqlDataSource,用HiddenField接收地区信息,在SqlDataSource的Selecting事件中更新SelectCommand的参数,达到更新GridView显示数据的目的。
然而在编码的过程中遇到问题:当地区信息返回至父页面后,Selecting事件无法激活,尽管在Page_Load方法中已对SelectCommand进行了重新赋值。于是给HiddenField添加ValueChanged事件,在该事件中对SelectCommand重新赋值,激活Selecting事件。
代码片段如下:
protected void Page_Load(object sender, EventArgs e) { if (HiddenField1.Value != "") // 选择了机构,则显示该机构的用户 { ViewState["orgid"] = HiddenField1.Value; // 保存机构代码 HiddenField1.Value = ""; } }
protected void SqlDataSource1_Selecting(object sender, SqlDataSourceSelectingEventArgs e) { // 创建并添加存储过程的查询参数 SqlParameter pa = new SqlParameter("@orgID", DbType.String); pa.Direction = ParameterDirection.Input; pa.Value = ViewState["orgid"].ToString().Trim(); e.Command.Parameters.Add(pa); }
protected void HiddenField1_ValueChanged(object sender, EventArgs e) { if (ViewState["orgid"] != null) // 选择了机构,则显示该机构的用户 { SqlDataSource1.SelectCommand = "select_user"; SqlDataSource1.SelectCommandType = SqlDataSourceCommandType.StoredProcedure; } }