65.9K
CodeProject 正在变化。 阅读更多。
Home

如何从支持 AJAX 的用户控件向客户端用户控件和父 ASPX 页面传递值

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.69/5 (6投票s)

2008 年 3 月 13 日

CPOL
viewsIcon

30115

如何从支持 AJAX 的用户控件向客户端用户控件和父 aspx 页面传递值

引言

这个项目的核心是构建一个启用了 Ajax 的对话框类型的基础用户控件。当点击按钮时,它会弹出一个 GridView 弹出用户控件,用户可以在其中选择一些值,并将选定的值发送回客户端页面,然后发送到父 ASPX 页面。数据可以以 DataSet 的形式发送到客户端页面,并从客户端页面发送到父页面。

背景

请阅读如何在使用用户控件之间传递值

Using the Code

  1. 设置 - 创建一个如下所示的基础用户控件。

  2. 创建客户端用户控件页面,将基础控件拖放到客户端用户控件页面上。客户端页面可以继承基础用户控件:客户端用户控件:基础用户控件
    //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));
  3. 在从控件中选择值后,用户可以按下“添加”按钮以将选定的值作为数据集返回。
    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();
    }
  4. 将客户端页面拖放到父页面上。
  5. 这是一个在 POPup Grid 中显示数据的示例

uc2.jpg

历史

  • 2008年3月13日:初始发布
© . All rights reserved.