繁体   English   中英

回发与Button_Click

[英]Postback vs Button_Click

我在按钮点击事件和回发时遇到问题。 我的页面上有一些文本框和一些下拉列表。 我从数据库中填充了这些文本框和ddls。 我也有2个按钮。 其中之一是使用来自文本框和下拉列表的更改的数据来更新数据库。 第二个按钮根据下拉列表之一中的值显示其他数据。 我的问题是,当我单击“更新”按钮时,数据库已更新,文本框和ddls中的数据已更改,但是当我进入“地址”选项卡并按Enter时,我得到了旧数据(在数据库中,所有数据都更改为新值)。 我可以添加方法

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

}

我不是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)
{

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM