如何在asp.net

时间:2015-06-23 09:24:16

标签: c# asp.net web-user-controls

我正在处理网络用户控件。我创建了两个简单的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;
    }
}

1 个答案:

答案 0 :(得分:0)

基本上,编辑/保存数据的用户控件不应该知道用户控件的逻辑,它检索数据并显示结果。这可能也是你想要实现的目标。

要让它们协同工作,您需要在页面中添加逻辑,这基本上消耗了用户控件并知道如何调用每个用户控件。 Todo这两个用户控件都可以公开EventHandlers,页面可以订阅,一旦事件发生就会触发,因此页面可以触发跟进。

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

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。