繁体   English   中英

如何在asp.net的一页上使用两个Web用户控件

[英]How to use two web user control on one page in asp.net

我正在使用Web用户控件。 我创建了两个简单的Web用户控件。 首先是将数据保存在数据库中,其次是检索数据。 他们工作得很好。

但是现在我试图将这两个控件添加到用户可以输入其数据的单个页面上,并在不加载页面的情况下从数据库更新最新数据。

这是用于使用Web用户控件中的存储过程插入数据的代码

protected void BtnSave_Click(object sender, EventArgs e)
{
        UserBO userBO = new UserBO();
        userBO.Name = txtname.Text;
        userBO.address = txAddress.Text;
        userBO.EmailID = txtEmailid.Text;
        userBO.Mobilenumber = txtmobile.Text;

        UserBL userBL = new UserBL();
        userBL.SaveUserregisrationBL(userBO);

        txtEmailid.Text = null;
        txAddress.Text = null;
        txtmobile.Text = null;
        txtname.Text = null;
}

这是用于从Web用户控件中的数据库获取用户详细信息的代码

protected void Page_Load(object sender, EventArgs e)
{
        Bussinesslogic.UserBL bl = new Bussinesslogic.UserBL();
        GridView1.DataSource = bl.getUserDetails();
        GridView1.DataBind();
}

这是我的业务逻辑

public class UserBL
{
   public int SaveUserregisrationBL(UserBO objUserBL) // passing Business object here
   {
       try
       {
           UserDA objUserda = new UserDA(); // Creating object of Dataccess

           return objUserda.AddUserDetails(objUserBL); // calling Method of DataAccess
       }
       catch
       {
           throw;
       }
   }

   public DataSet getUserDetails() // passing Business object Here
   {
       try
       {
           UserDA da = new UserDA();

           return da.getUserDetail();
       }
       catch
       {
           throw;
       }
   }
}

我的数据访问层是

public class UserDA
{
    SqlConnection con = new
     SqlConnection(ConfigurationManager.ConnectionStrings["mycon"].ToString());

    public int AddUserDetails(UserBO ObjBO) // passing Business object here
    {
        try
        {
            /* Because we will put all out values from our (UserRegistration.aspx)
             To in Business object and then Pass it to Business logic and then to
             DataAcess
             this way the flow carry on*/
            SqlCommand cmd = new SqlCommand("sprocUserinfoInsertUpdateSingleItem", con);
            cmd.CommandType = CommandType.StoredProcedure;

            cmd.Parameters.AddWithValue("@Name", ObjBO.Name);
            cmd.Parameters.AddWithValue("@Address", ObjBO.address);
            cmd.Parameters.AddWithValue("@EmailID", ObjBO.EmailID);
            cmd.Parameters.AddWithValue("@Mobilenumber", ObjBO.Mobilenumber);

            con.Open();
            int Result = cmd.ExecuteNonQuery();
            cmd.Dispose();

            return Result;
        }
        catch
        {
            throw;
        }
    }

    public DataSet getUserDetail()
    {
        string query = "SPGetUserInfo";
        SqlDataAdapter adp = new SqlDataAdapter(query, con);
        DataSet ds = new DataSet();
        adp.Fill(ds);
        return ds;
    }
}

从根本上说,用于编辑/保存数据的用户控件不应了解用于检索数据并显示结果的用户控件的逻辑。 这也可能是您想要实现的目标。

为了使它们协同工作,您需要在页面中添加逻辑,该逻辑基本上消耗了两个用户控件,并且知道如何调用每个用户控件。 要做到这一点,这两个用户控件都可以公开页面可以订阅的EventHandler,一旦事件发生,该事件将被触发,因此页面可以触发后续事件。

在您的情况下,您的编辑/保存用户控件需要一个事件处理程序(先执行此操作,因此可能包含错别字):

public event EventHandler Saved = null;

protected void BtnSave_Click(object sender, EventArgs e)
{
    UserBO userBO = new UserBO();
    userBO.Name = txtname.Text;
    userBO.address = txAddress.Text;
    userBO.EmailID = txtEmailid.Text;
    userBO.Mobilenumber = txtmobile.Text;

    UserBL userBL = new UserBL();
    userBL.SaveUserregisrationBL(userBO);

    txtEmailid.Text = null;
    txAddress.Text = null;
    txtmobile.Text = null;
    txtname.Text = null;

    //Check whether a control has subscribed to the Saved event
    EventHandler tmp = Saved;
    if (tmp != null) {
        //Trigger the Saved event
        tmp(this, args);
    }
}

现在在您的页面的Page_Load中添加以下内容:

yourSaveEditUserControlInstance.Saved += ShowResults;

并在页面中添加ShowResults方法:

private void ShowResults(object sender, EventArgs args) {
    //Show your results by calling the RetrieveAndShow method in your other user-control
}

我使用了EventHandler,因为没有任何更新的数据通过。 如果您需要知道这一点,可以使用CommandEventHandler并将保存的对象/ id作为CommandArgument传递,或者如果您不喜欢使用CommandEventHandler,则可以创建一个自定义EventHandler。 您的ShowResults将接收CommandEventArgs,而不是EventArgs,您可以在其中从CommandArgument重铸对象/ id。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM