JackofAll
JackofAll

Reputation: 537

Update Form Not Updating Details

I have created a simple form to display a users details, with the following fields:

First Name
Surname
Team Name
Team Stadium
Email
Receive Reminder
Receive Summary

I retrieve the details for the logged in user, and allow the fields to be edited to update. However when the on-click event of the update button is fired, the fields go back to their original values.

Here is my code in C#

protected void Page_Load(object sender, EventArgs e)
{
    SqlConnection conn = new SqlConnection(WebConfigurationManager.ConnectionStrings["RaiseFantasyLeagueConnectionString"].ConnectionString);
    SqlCommand cmd = new SqlCommand("[dbo].[GetUsersProfile]", conn);
    cmd.CommandType = CommandType.StoredProcedure;

    string userId = Membership.GetUser().ProviderUserKey.ToString();
    SqlParameter userIDParam = new SqlParameter("@userId", userId);

    cmd.Parameters.Add(userIDParam);

    conn.Open();
    SqlDataReader dReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
    while (dReader.Read())
    {
        FirstName.Text = (dReader["ManagerFirstName"].ToString());
        Surname.Text = (dReader["ManagerSurname"].ToString());
        TeamName.Text = (dReader["TeamName"].ToString());
        StadiumName.Text = (dReader["TeamStadium"].ToString());
        Email.Text = (dReader["Email"].ToString());
        Reminder.Checked = (bool)dReader["RecieveReminder"];
        Prediction.Checked = (bool)dReader["RecieveSummary"];
    }
    dReader.Close();
    conn.Close();
}

protected void UpdateDetailsButton_Click(object sender, EventArgs e)
{
    SqlConnection conn = new SqlConnection(WebConfigurationManager.ConnectionStrings["RaiseFantasyLeagueConnectionString"].ConnectionString);
    SqlCommand cmd = new SqlCommand("[dbo].[UpdateUserDetails]", conn);
    cmd.CommandType = CommandType.StoredProcedure;

    string userId = Membership.GetUser().ProviderUserKey.ToString();
    SqlParameter userIDParam = new SqlParameter("@userId", userId);

    TextBox FirstNameTextBox = (TextBox)Master.FindControl("ContentPlaceHolderMain").FindControl("FirstName");
    SqlParameter FirstNameParam = new SqlParameter("@ManagerFirstName", FirstNameTextBox.Text);

    TextBox SurnameTextBox = (TextBox)Master.FindControl("ContentPlaceHolderMain").FindControl("Surname");
    SqlParameter SurnameParam = new SqlParameter("@ManagerSurname", SurnameTextBox.Text);

    TextBox TeamNameTextBox = (TextBox)Master.FindControl("ContentPlaceHolderMain").FindControl("TeamName");
    SqlParameter TeamNameParam = new SqlParameter("@TeamName", TeamNameTextBox.Text);

    TextBox TeamStadiumNameTextBox = (TextBox)Master.FindControl("ContentPlaceHolderMain").FindControl("StadiumName");
    SqlParameter TeamStadiumNameParam = new SqlParameter("@TeamStadium", TeamStadiumNameTextBox.Text);

    TextBox EmailTextBox = (TextBox)Master.FindControl("ContentPlaceHolderMain").FindControl("Email");
    SqlParameter EmailParam = new SqlParameter("@Email", EmailTextBox.Text);

    SqlParameter RecieveReminderParam = new SqlParameter("@RecieveReminder", 1);

    SqlParameter RecieveSummaryParam = new SqlParameter("@RecieveSummary", 1);
    cmd.Parameters.Add(userIDParam);
    cmd.Parameters.Add(FirstNameParam);
    cmd.Parameters.Add(SurnameParam);
    cmd.Parameters.Add(TeamNameParam);
    cmd.Parameters.Add(TeamStadiumNameParam);
    cmd.Parameters.Add(EmailParam);
    cmd.Parameters.Add(RecieveReminderParam);
    cmd.Parameters.Add(RecieveSummaryParam);

    conn.Open();
    cmd.ExecuteNonQuery();
    conn.Close();
}

And for the ASP

<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolderMain" runat="server">
<div class="row">
    <div class="span12">
        <h3>
            My Profile</h3>
    </div>
</div>
<div class="row">
    <div class="span2">
        <label class="control-label" for="firstNameTextBox">
            First Name:</label>
    </div>
    <div class="span3">
        <asp:TextBox ID="FirstName" runat="server"></asp:TextBox>
    </div>
</div>
<div class="row">
    <div class="span2">
        <label class="control-label" for="surnameTextBox" >
            Surname:</label>
    </div>
    <div class="span3">
        <asp:TextBox ID="Surname" runat="server"></asp:TextBox>
    </div>
</div>
<div class="row">
    <div class="span2">
        <label class="control-label" for="teamNameTextBox">
            Team Name:</label>
    </div>
    <div class="span3">
        <asp:TextBox ID="TeamName" runat="server"></asp:TextBox>
    </div>
</div>
<div class="row">
    <div class="span2">
        <label class="control-label" for="stadiumNameTextBox">
            Stadium Name:</label>
    </div>
    <div class="span3">
        <asp:TextBox ID="StadiumName" runat="server"></asp:TextBox>
    </div>
</div>
<div class="row">
    <div class="span2">
        <label class="control-label" for="emailTextBox">
            Email Address:</label>
    </div>
    <div class="span3">
        <asp:TextBox ID="Email" runat="server"></asp:TextBox>
    </div>
</div>
<div class="row">
    <div class="span2">
        <label class="control-label" for="reminderCheckBox">
            Recieve Reminder Email:</label>
    </div>
    <div class="span3">
        <input type="checkbox" id="Reminder" runat="server"/>
    </div>
</div>
<div class="row">
    <div class="span2">
        <label class="control-label" for="predictionCheckBox">
            Recieve Prediction Email:</label>
    </div>
    <div class="span3">
        <input type="checkbox" id="Prediction" runat="server"/>
    </div>
</div>
<div class="row">
    <div class="span5">
        <asp:Button ID="UpdateDetailsButton" 
            CssClass="btn btn-primary rightAlignButton" runat="server" Text="Confirm" 
            onclick="UpdateDetailsButton_Click" />
    </div>
</div>

I've tried using the stored procedure in SQL Management Studio and it updates as expected, so for some reason the fields are not reading the updated values when clicking update.

Any suggestions would be great, Thanks !!

Upvotes: 0

Views: 161

Answers (2)

Mikael Engver
Mikael Engver

Reputation: 4768

You should only load data from the database the first time, so you must check if it's not a Postback.

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        LoadDataFromDatabase();
    }
}

private void LoadDataFromDatabase()
{
    SqlConnection conn = new SqlConnection(WebConfigurationManager.ConnectionStrings["RaiseFantasyLeagueConnectionString"].ConnectionString);
    SqlCommand cmd = new SqlCommand("[dbo].[GetUsersProfile]", conn);
    cmd.CommandType = CommandType.StoredProcedure;

    string userId = Membership.GetUser().ProviderUserKey.ToString();
    SqlParameter userIDParam = new SqlParameter("@userId", userId);

    cmd.Parameters.Add(userIDParam);

    conn.Open();
    SqlDataReader dReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
    while (dReader.Read())
    {
        FirstName.Text = (dReader["ManagerFirstName"].ToString());
        Surname.Text = (dReader["ManagerSurname"].ToString());
        TeamName.Text = (dReader["TeamName"].ToString());
        StadiumName.Text = (dReader["TeamStadium"].ToString());
        Email.Text = (dReader["Email"].ToString());
        Reminder.Checked = (bool)dReader["RecieveReminder"];
        Prediction.Checked = (bool)dReader["RecieveSummary"];
    }
    dReader.Close();
    conn.Close();
}

Upvotes: 0

Sunny
Sunny

Reputation: 4809

Use IsPostBack in Page_Load event

if(!IsPostBack)
{
        SqlConnection conn = new SqlConnection(WebConfigurationManager.ConnectionStrings["RaiseFantasyLeagueConnectionString"].ConnectionString);
        SqlCommand cmd = new SqlCommand("[dbo].[GetUsersProfile]", conn);
        cmd.CommandType = CommandType.StoredProcedure;

        string userId = Membership.GetUser().ProviderUserKey.ToString();
        SqlParameter userIDParam = new SqlParameter("@userId", userId);

        cmd.Parameters.Add(userIDParam);

        conn.Open();
        SqlDataReader dReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
        while (dReader.Read())
        {
            FirstName.Text = (dReader["ManagerFirstName"].ToString());
            Surname.Text = (dReader["ManagerSurname"].ToString());
            TeamName.Text = (dReader["TeamName"].ToString());
            StadiumName.Text = (dReader["TeamStadium"].ToString());
            Email.Text = (dReader["Email"].ToString());
            Reminder.Checked = (bool)dReader["RecieveReminder"];
            Prediction.Checked = (bool)dReader["RecieveSummary"];
        }
        dReader.Close();
        conn.Close();
}

Upvotes: 1

Related Questions