如何从支持 AJAX 的用户控件向客户端用户控件和父 ASPX 页面传递值
如何从支持 AJAX 的用户控件向客户端用户控件和父 aspx 页面传递值
引言
这个项目的核心是构建一个启用了 Ajax 的对话框类型的基础用户控件。当点击按钮时,它会弹出一个 GridView
弹出用户控件,用户可以在其中选择一些值,并将选定的值发送回客户端页面,然后发送到父 ASPX 页面。数据可以以 DataSet
的形式发送到客户端页面,并从客户端页面发送到父页面。
背景
请阅读如何在使用用户控件之间传递值
Using the Code
- 设置 - 创建一个如下所示的基础用户控件。
- 创建客户端用户控件页面,将基础控件拖放到客户端用户控件页面上。客户端页面可以继承基础用户控件:客户端用户控件:基础用户控件
//Base Control Codes //Define the Delegate and Event public delegate void Ep_UserControlCommandEventHandler (object sender, AB_UserControlCommandEventArgs e); public event AB_UserControlCommandEventHandler AjaxGridSelectedData; //User can set the DataSet from the Client User Control user can //pass a data for the GridView of the Base control from Client User control; //Define the DataSet property on base control private DataSet data; public DataSet Parent_DataSet { set { data = value; ; } } //When user clicks on the show dialog button. This is base control event protected void Show_Click(object sender, EventArgs e) { GridView1.DataSource = data; GridView1.DataBind(); BPanel.Update(); mdlPopup.Show(); } //Define the virtual method this method needs to implement //in the client page to access the return data set value protected virtual void OnAB_AjaxGridSelectedData(AB_UserControlCommandEventArgs e) { if (AjaxGridSelectedData != null) AjaxGridSelectedData(this, e); } //Pass the Selected values to the Client Page by Base Command event AB_UserControlCommandEventArgs(N_data));
- 在从控件中选择值后,用户可以按下“添加”按钮以将选定的值作为数据集返回。
protected void btnadd_Click(object sender, EventArgs e) { DataTable dt = new DataTable(); dt.Columns.Add(new DataColumn("Id", typeof(string))); dt.Columns.Add(new DataColumn("Name", typeof(string))); dt.Columns.Add(new DataColumn("Is_Selected", typeof(Boolean))); ArrayList Id_List = (ArrayList)Session["CHECKED_ITEMS"]; foreach (GridViewRow Ro in GridView1.Rows) { bool isChecked = ((CheckBox)Ro.FindControl("Is_Selected")).Checked; if (isChecked) { if (Id_List != null) { Id_List.Add(Ro.Cells[0].Text); } else { DataRow dra = dt.NewRow(); dra["Id"] = Ro.Cells[0].Text; dra["Name"] = Ro.Cells[1].Text; dra["Is_Selected"] = true; dt.Rows.Add(dra); } } } if(Id_List!=null) { string Id_s ="'"; for (int i = 0; i < Id_List.Count; i++) { Id_s += Id_List[i].ToString() +"','"; } DataTable MyTable = data.Tables[0]; DataRow[] test; string Slect = "Id in (" + Id_s + ")"; Slect=Slect.Replace(",')", ")"); test = MyTable.Select(Slect); foreach (DataRow rw in test) { DataRow dr = dt.NewRow(); dr["Id"]=rw["Id"]; dr["Name"]=rw["Name"]; dr["Is_Selected"]=true; dt.Rows.Add(dr); } } DataSet N_data = new DataSet(); N_data.Tables.Add(dt); OnEp_AjaxGridSelectedData(new AB_UserControlCommandEventArgs(N_data)); mdlPopup.Hide(); } //Client User control page implements the base control event protected void Page_Load(object sender, EventArgs e) { AjaxGridViewBaseControl1.Parent_DataSet = Main_GridData(); AjaxGridViewBaseControl1.AjaxGridSelectedData += new AB_UserControlCommandEventHandler(OnAjaxGridSelectedData); } //Get value from Base private void OnAjaxGridSelectedData(object sender, AB_UserControlCommandEventArgs e) { //The selected values can be displayed in client control //and even return back to parent page GridView1.DataSource = e.EpDataSet; GridView1.DataBind(); }
- 将客户端页面拖放到父页面上。
- 这是一个在 POPup Grid 中显示数据的示例
历史
- 2008年3月13日:初始发布