1

私はWebユーザーコントロールに取り組んでいます。2 つの単純な Web ユーザー コントロールを作成しました。1 つ目はデータベースにデータを保存することで、2 つ目はデータを取得することです。彼らは完全にうまく機能しています。

しかし今、私は、ユーザーが自分のデータを入力できる単一のページに両方のコントロールを追加し、ページの読み込みなしでデータベースから最新のデータを更新しようとしています。

これは、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;
    }
}
4

1 に答える 1

0

基本的に、データを編集/保存するユーザー コントロールは、データを取得して結果を表示するユーザー コントロールのロジックを認識してはなりません。それはおそらくあなたが達成しようとしていることでもあります。

それらを連携させるには、基本的に両方のユーザーコントロールを消費し、各ユーザーコントロールを呼び出す方法を知っているロジックをページに追加する必要があります。これを行うには、両方のユーザー コントロールが、ページがサブスクライブできる 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 は、CommandArgument からオブジェクト/ID を再キャストできる EventArgs の代わりに CommandEventArgs を受け取ります。

于 2015-06-23T10:04:02.630 に答える