2013-10-10 3 views
0

У меня проблема с событием нажатия кнопки и отправкой назад. У меня есть страница с некоторыми текстовыми полями и некоторыми раскрывающимися списками. Я заполняю эти текстовые поля и ddls из базы данных. У меня также есть 2 кнопки. Один из них - это обновление базы данных с измененными данными из текстовых полей и выпадающих списков. Вторая кнопка отображает дополнительные данные в зависимости от значения из одного из раскрывающегося списка. Моя проблема заключается в том, что при нажатии кнопки обновления база данных обновляется, а данные в текстовых и ddls изменяются, но когда я вхожу на вкладку адресов и нажимаю Enter, я получаю старые данные (в базе данных все изменяется на новые значения). Я мог бы добавить методPostback vs Button_Click

если (IsPostBack)

и данные будут всегда свежие, но в этом случае я не буду иметь возможность изменить значение в одной из выпадающего списка, который отображает дополнительные данные (Автоответчик будет загружать данные в этот ddl). Есть ли какое-нибудь обходное решение? Если мое описание не ясно, сообщите мне.

EDIT1 Добавление C# код

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(); 
    } 
} 

}

+1

ваше описание не ясно, ум разместить код и объяснить немного более четкого – iJade

+0

добавления кода. Пожалуйста, дайте мне знать, если это будет достаточно. – ironcurtain

+0

Вообще-то моя проблема в том, что когда я перехожу на вкладку адреса и нажимаю Enter (после нажатия кнопки обновления), она возвращает старые данные (которые были до щелчка обновления). Все нормально, когда я обновляю страницу (F5). – ironcurtain

ответ

1

Я не 100% Я укомплектовать понять проблему, но это звучит для меня, что вам нужно иметь

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

где вы загружаете все свои данные в выпадающие меню, а затем в выпадающем меню есть

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

Затем в коде позади есть

protected void ddlDropDown_SelectedIndexChanged(object sender, EventArgs e) 
{ 

} 
Смежные вопросы