Question

I have problem with button click event and post back. I have a page with some textboxes and some drop-down lists. I fill those textboxes and ddls from database. I also have 2 buttons. One of them is updating database with changed data from textboxes and drop-down lists. Second button is displaying additional data depending on value from one of the drop-down list. My problem is that when I click update button the database is updated and data in textboxes and ddls are changed but when I enter into address tab and push Enter I got old data (In database everything is changed into new values). I could add method to

if (IsPostBack)

and data will be always fresh but in that case I will not be able to change value in one of the drop down list which displays additional data (Auto post back will load data into this ddl). Is there any workaround to this? If my description is not clear, please let me know.

EDIT1 Adding C# code

public partial class EditStaff : System.Web.UI.Page
{
   Methods methods = new Methods();
   IPrincipal p = HttpContext.Current.User;

protected void Page_Load(object sender, EventArgs e)
{
    string soeid = Convert.ToString(Request["soeid"]);
    DataSet dsUserDetails = new DataSet();
    DataTable dtUserDetails = new DataTable();
    DataSet dsDDLs = new DataSet();

    if (!IsPostBack)
    {
        GetDDLsItems();
        FillFields();
    }
    else
    {
        //FillFields();
    }
}

protected void btnUpdate_Click(object sender, EventArgs e)
{
    string update_error = "";
    string SOEID = txtSOEID.Text;
    string firstName = txtFirstName.Text;
    string lastName = txtLastName.Text;
    string email = txtEmail.Text.Trim();
    int remsCode = Convert.ToInt32(ddlREMS.SelectedItem.ToString());
    int active = Convert.ToInt32(ddlActive.SelectedValue);
    int isGVO = Convert.ToInt32(ddlIsGVO.SelectedValue);
    int gvoTeamID = Convert.ToInt32(ddlGVOTeams.SelectedValue);
    int profileID = Convert.ToInt32(ddlProfiles.SelectedValue);
    int isSOW = Convert.ToInt16(ddlIsSOW.SelectedValue);
    int headcount = Convert.ToInt32(ddlHeadcount.SelectedValue);
    string updater_domain = p.Identity.Name.ToString();
    string updater = "";
    int index = updater_domain.IndexOf("\\");
    int email_at_index = email.IndexOf("@");

    if (index != -1)
    {
        updater = updater_domain.Substring(index + 1, 7);
    }
    else
    {
        updater = updater_domain;
    }

    if (firstName.Length < 2)
    {
        update_error = "First Name should have at least 2 characters. ";
        lblStatus.Text = update_error;
        lblStatus.ForeColor = System.Drawing.Color.Red;
        lblStatus.Visible = true;
    }
    else if (lastName.Length < 2)
    {
        update_error = update_error + "Last Name should have at least 2 characters. ";
        lblStatus.Text = update_error;
        lblStatus.ForeColor = System.Drawing.Color.Red;
        lblStatus.Visible = true;
    }
    else if (email_at_index == -1 && email.Length < 5)
    {
        update_error = update_error + "Invalid email address.";
        lblStatus.Text = update_error;
        lblStatus.ForeColor = System.Drawing.Color.Red;
        lblStatus.Visible = true;
    }
    else
    {
        // create ConnectDatabase object to get acces to its methods
        ConnectDatabase connectDB = new ConnectDatabase();
        IDBManager dbManager = connectDB.ConnectDB();
        DataSet ds = new DataSet();

        try
        {
            dbManager.Open();
            dbManager.CreateParameters(13);
            dbManager.AddParameters(0, "@SOEID", SOEID);
            dbManager.AddParameters(1, "@firstName", firstName);
            dbManager.AddParameters(2, "@LastName", lastName);
            dbManager.AddParameters(3, "@Email", email);
            dbManager.AddParameters(4, "@REMSCode", remsCode);
            dbManager.AddParameters(5, "@Active", active);
            dbManager.AddParameters(6, "@IsGVO", isGVO);
            dbManager.AddParameters(7, "@gvoTeamID", gvoTeamID);
            dbManager.AddParameters(8, "@profileID", profileID);
            dbManager.AddParameters(9, "@isSOW", isSOW);
            dbManager.AddParameters(10, "@headcount", headcount);
            dbManager.AddParameters(11, "@lastUpdatedBy", updater);
            dbManager.AddParameters(12, "@status", active);
            dbManager.ExecuteNonQuery(CommandType.StoredProcedure, "sp_update_user");

        }
        catch (Exception error)
        {
            HttpContext.Current.Response.Write(error.ToString());
        }
        finally
        {
            dbManager.Close();
            dbManager.Dispose();
            lblStatus.Visible = true;
            lblStatus.Text = "User data updated successfully.";
            lblStatus.ForeColor = System.Drawing.Color.Green;
            FillFields();
        }
    }
}

protected void btnCancel_Click(object sender, EventArgs e)
{
    FillFields();
    gvREMSDetails.Visible = false;
}

private void FillFields()
{
    string soeid = Convert.ToString(Request["soeid"]);
    DataSet dsUserDetails = new DataSet();
    DataTable dtUserDetails = new DataTable();
    DataSet dsDDLs = new DataSet();

    dsUserDetails = GetUserDetails(soeid);
    dtUserDetails = dsUserDetails.Tables[0];
    string gvoTeam = dtUserDetails.Rows[0].ItemArray[8].ToString();
    string profile = dtUserDetails.Rows[0].ItemArray[10].ToString();
    string remsCode = dtUserDetails.Rows[0].ItemArray[4].ToString();

    txtSOEID.Text = dtUserDetails.Rows[0].ItemArray[0].ToString();
    txtFirstName.Text = dtUserDetails.Rows[0].ItemArray[1].ToString();
    txtLastName.Text = dtUserDetails.Rows[0].ItemArray[2].ToString();
    txtEmail.Text = dtUserDetails.Rows[0].ItemArray[3].ToString();
    ddlREMS.SelectedValue = remsCode.ToString();

    txtAddress.Text = dtUserDetails.Rows[0].ItemArray[5].ToString();
    //Response.Write((Convert.ToInt16(dtUserDetails.Rows[0].ItemArray[6])).ToString());
    ddlActive.SelectedValue = (Convert.ToInt16(dtUserDetails.Rows[0].ItemArray[6])).ToString();
    ddlIsGVO.SelectedValue = (Convert.ToInt16(dtUserDetails.Rows[0].ItemArray[7])).ToString();
    ddlGVOTeams.SelectedValue = gvoTeam;
    ddlProfiles.SelectedValue = profile;
    ddlIsSOW.SelectedValue = (Convert.ToInt16(dtUserDetails.Rows[0].ItemArray[12])).ToString();
    lblLastUpdatedBy_value.Text = dtUserDetails.Rows[0].ItemArray[14].ToString();
    lblLastUpdatedDate_value.Text = dtUserDetails.Rows[0].ItemArray[15].ToString();
}

protected void btnGetREMSdetails_Click(object sender, EventArgs e)
{
    //int remsCode = Convert.ToInt32(ddlREMS.SelectedValue);

    // create ConnectDatabase object to get acces to its methods
    ConnectDatabase connectDB = new ConnectDatabase();
    IDBManager dbManager = connectDB.ConnectDB();
    DataSet ds = new DataSet();

    try
    {
        dbManager.Open();
        dbManager.CreateParameters(1);
        dbManager.AddParameters(0, "@remscode", Convert.ToInt32(ddlREMS.SelectedValue));
        ds = dbManager.ExecuteDataSet(CommandType.Text, "select * from vwREMSDetails where [rems code] = @remscode");
        gvREMSDetails.DataSource = ds;
        gvREMSDetails.DataBind();
        gvREMSDetails.Visible = true;
    }
    catch (Exception error)
    {
        HttpContext.Current.Response.Write(error.ToString());
    }
    finally
    {
        dbManager.Close();
        dbManager.Dispose();
    }
}

private static DataSet GetUserDetails(string soeid)
{
    // create ConnectDatabase object to get acces to its methods
    ConnectDatabase connectDB = new ConnectDatabase();
    IDBManager dbManager = connectDB.ConnectDB();
    DataSet ds = new DataSet();

    try
    {
        dbManager.Open();
        dbManager.CreateParameters(1);
        dbManager.AddParameters(0, "@soeid", soeid);
        ds = dbManager.ExecuteDataSet(CommandType.Text, "select * from vwUsersDetails where soeid = @soeid");
    }
    catch (Exception error)
    {
        HttpContext.Current.Response.Write(error.ToString());
    }
    finally
    {
        dbManager.Close();
        dbManager.Dispose();
    }
    return ds;
}

private void GetDDLsItems()
{
    // create ConnectDatabase object to get acces to its methods
    ConnectDatabase connectDB = new ConnectDatabase();
    IDBManager dbManager = connectDB.ConnectDB();
    DataSet ds = new DataSet();
    try
    {
        dbManager.Open();
        ds = dbManager.ExecuteDataSet(CommandType.StoredProcedure, "sp_select_edit_user_ddls");

        ddlREMS.DataSource = ds.Tables[0];
        ddlREMS.DataTextField = "remsCode";
        ddlREMS.DataValueField = "remsCode";
        ddlREMS.DataBind();

        ddlActive.DataSource = ds.Tables[1];
        ddlActive.DataTextField = "Active";
        ddlActive.DataValueField = "ActiveID";
        ddlActive.DataBind();

        ddlIsGVO.DataSource = ds.Tables[2];
        ddlIsGVO.DataTextField = "IsGVO";
        ddlIsGVO.DataValueField = "IsGVOID";
        ddlIsGVO.DataBind();

        //methods.GetGVOFunctions(ddlGVOFunctions);
        //int? gvoFunctionID = string.IsNullOrEmpty(ddlGVOFunctions.SelectedValue) ? (int?)null : (int?)Convert.ToInt32(ddlGVOFunctions.SelectedValue);
        methods.GetGVOTeams(null, ddlGVOTeams);

        ddlProfiles.DataSource = ds.Tables[3];
        ddlProfiles.DataTextField = "profilename";
        ddlProfiles.DataValueField = "profileID";
        ddlProfiles.DataBind();

        ddlIsSOW.DataSource = ds.Tables[4];
        ddlIsSOW.DataTextField = "IsSOW";
        ddlIsSOW.DataValueField = "IsSOWID";
        ddlIsSOW.DataBind();

        ddlHeadcount.DataSource = ds.Tables[5];
        ddlHeadcount.DataTextField = "Headcount";
        ddlHeadcount.DataValueField = "HeadcountID";
        ddlHeadcount.DataBind();
    }
    catch (Exception error)
    {
        HttpContext.Current.Response.Write(error.ToString());
    }
    finally
    {
        dbManager.Close();
        dbManager.Dispose();
    }
}

}

Was it helpful?

Solution

I'm not 100% I completly understand the issue, but it sounds to me that you need to have

if(!IsPostBack) 
{ 
     // load dropdown data here 
}

where you load all your data into the dropdowns, and then on the dropdown have

<asp:DropDownList SelectedIndexChanged="ddlDropdown_SelectedIndexChanged" id="ddlDropdown" AutoPostBack="true"></asp:DropDownList>

Then in your code behind have

protected void ddlDropDown_SelectedIndexChanged(object sender, EventArgs e)
{

}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top