0

ASP.NET にフォームがあり、ユーザーにデータが存在する場合はデータをロードし、更新できるようにします。だからPage_Load私は持っています:

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!CheckAndAddRecord(_currentUser.UserID))
        {
            CreateEntryPoint(_currentUser.UserID);
        } 
        else
        {
            DataView dv = LoadApplicationData(_currentUser.UserID);
            foreach (DataRowView rowView in dv)
            {
                DataRow row = rowView.Row;

                _applicationId = row["id"].ToString();

                txtProjectNumber.Text = row["ProjectNumber"].ToString();
                  if (String.IsNullOrEmpty(chkSignedNDANo.ToString()) ||  String.IsNullOrEmpty(chkSignedNDAYes.ToString()))
                  {
                     chkSignedNDANo.Checked = Convert.ToBoolean(row["SignedNDAOnFile"]);
                     chkSignedNDAYes.Checked = Convert.ToBoolean(row["SignedNDAOnFile"]);
                  }
                  txtDateWritten.Text = row["DateWritten"].ToString();
            }
        }
    }

このメソッドを呼び出します。

    public bool CheckAndAddRecord(int UserId)
    {
        string connStr = ConfigurationManager.ConnectionStrings["SiteSqlServer"].ConnectionString;
        SqlConnection conn = new SqlConnection(connStr);
        SqlCommand cmd = new SqlCommand("CheckUserInTemp", conn);
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.Add(new SqlParameter("@SubmittedBy", UserId));
        SqlDataAdapter dap = new System.Data.SqlClient.SqlDataAdapter(cmd);
        DataSet ds = new DataSet();

        // open conn
        if (conn.State == ConnectionState.Closed)
            conn.Open();

        // fill
        dap.Fill(ds);

        // close the conn
        if (conn.State == ConnectionState.Open)
            conn.Close();

        bool boolRecordExist = false;

        if (ds.Tables[0].DefaultView.Count == 0)
        {
            boolRecordExist = false;
        } 
        else
        {
            boolRecordExist = true;
        }

        return boolRecordExist;
    }

これは機能し、フィールドに正しく入力されているようです。しかし、更新するには、次のメソッドを呼び出すボタン クリックを呼び出します。

    public void UpdateRecordInTemp(int appId, string projectNumber)
    {
        string connStr = ConfigurationManager.ConnectionStrings["SiteSqlServer"].ConnectionString;
        SqlConnection conn = new SqlConnection(connStr);
        SqlCommand cmd = new SqlCommand("CPC_ProposalUpdateTemp", conn);
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.AddWithValue("@id", appId);
        cmd.Parameters.AddWithValue("@ProjectNumber", txtProjectNumber.Text);

        try
        {
            conn.Open();
            cmd.ExecuteNonQuery();
        }
        catch (Exception ex)
        {
            throw new Exception("Exception adding coupon. " + ex.Message);
        }
        finally
        {
            conn.Close();
        }
    }

問題は、渡されたフィールドに常に古い値が含まれていることです。そのため、ページに入ったときの値が「123」で、「abc」に変更してボタンをクリックすると、「abc」の代わりに「123」が渡されます。

長い投稿で申し訳ありません。すべての詳細を知りたかったのですが、これには困惑しています。ありがとう!

4

1 に答える 1

0

ページで のロード チェックIsPostBackプロパティif。ページの読み込みごとにコードが実行されているようです。

if(!IsPostBack)
{
       // Do your work
}

アップデート

あなたのコードメソッドでは、代わりにUpdateRecordInTemp(int appId, string projectNumber)使用していませんprojectNumbertxtProjectNumber.Text

于 2012-05-17T20:26:58.170 に答える