将值从一个页面传递到另一个页面并进行更新

时间:2012-09-30 20:30:53

标签: c# asp.net gridview

我有2页,第1页包含gridview,我创建了一个linkbutton,将ID传递到另一个页面(第2页)。在第2页,我填写了10 textbox es,我有一个按钮用于编辑信息。

此代码适用于第1页:

...
        <asp:TemplateField>
            <ItemTemplate>
                <asp:LinkButton ID="lbNextPage" runat="server" 
                    PostBackUrl='<%# "~/secure/upst.aspx?id="+ Eval("ID_st") %>'>edit</asp:LinkButton>
                &nbsp;
            </ItemTemplate>
        </asp:TemplateField>

...

这是第2页的代码:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        txtID.Text = Request.QueryString["id"].ToString();
    }
    SqlConnection con = new SqlConnection(strcon);
    string query = "select * from user_st where ID_st = @id";
    SqlCommand cmd = new SqlCommand(query, con);
        cmd.Parameters.AddWithValue("@id", stid);
        con.Open();
        SqlDataReader dr = cmd.ExecuteReader();
        dr.Read();

        txtName.Text = dr["name"].ToString();
        txtFamily.Text = dr["family"].ToString();
        txtAddress.Text = dr["adres"].ToString();
        txtHomeTel.Text = dr["home_tel"].ToString();
        txtTahsilat.Text = dr["tahsilat"].ToString();
        txtTel.Text = dr["celphone"].ToString();
        txtEmail.Text = dr["email"].ToString();
        txtShoghl.Text = dr["shoghl"].ToString();
        txtAge.Text = dr["age"].ToString();
        txtFadername.Text = dr["fader_name"].ToString();
        txtIDnumber.Text = dr["melli_code"].ToString();
        txtShSh.Text = dr["sh_sh"].ToString();

} 

protected void btnOk_Click(object sender, EventArgs e)
{


    Boolean res = false;
    SqlConnection conn = new SqlConnection(strcon);

    string famil = txtFamily.Text;
    string name = txtName.Text;
    string fader = txtFadername.Text;
    string tahsil = txtTahsilat.Text;
    Double telhome = Convert.ToDouble(txtHomeTel.Text);
    string adres = txtAddress.Text;
    Double cel = Convert.ToDouble(txtTel.Text);
    string email = txtEmail.Text;
    Double shsh = Convert.ToDouble(txtIDnumber.Text);
    string shoghl = txtShoghl.Text;
    int age = Convert.ToInt32(txtAge.Text);
    Double melli = Convert.ToDouble(txtIDnumber.Text);
    int id = Convert.ToInt32(txtID.Text);


    string query = "update user_st set name=@name ,fader_name=@fader ,family=@famil,tahsilat=@tahsil,adres=@adres,home_tel=@telhome,celphone=@cel,email=@email ,sh_sh=@shsh,shoghl=@shoghl,age=@age,melli_code=@melli where ID_st=@id";

    SqlCommand cmdup = new SqlCommand(query, conn);
    cmdup.Parameters.AddWithValue("@name",name);
    cmdup.Parameters.AddWithValue("@fader_name",fader );
    cmdup.Parameters.AddWithValue("@family", famil);
    cmdup.Parameters.AddWithValue("@tahsilat",tahsil);
    cmdup.Parameters.AddWithValue("@adres", adres);
    cmdup.Parameters.AddWithValue("home_tel",telhome );
    cmdup.Parameters.AddWithValue("@celphone",cel );
    cmdup.Parameters.AddWithValue("@email", email);
    cmdup.Parameters.AddWithValue("@sh_sh", shsh);
    cmdup.Parameters.AddWithValue("@shoghl", shoghl);
    cmdup.Parameters.AddWithValue("@age",age );
    cmdup.Parameters.AddWithValue("@melli_code", melli);
    cmdup.Parameters.AddWithValue("@id", id);


    try
    {
        conn.Open();
        cmdup.ExecuteNonQuery();
        conn.Close();
        res = true;
    }
    catch (SqlException ex)
    {
        lblRes.Text = "error" + ex.ToString();
    }

    if (res)
    {
        lblResult.Text = "Ok";
    }

这不行,所以我尝试了这个:

        //cmdup.Parameters.Add("@name", SqlDbType.NVarChar, 50).Value = txtName.Text;
    //cmdup.Parameters.Add("@fader_name", SqlDbType.NVarChar, 50).Value = txtFadername.Text;
    //cmdup.Parameters.Add("@family", SqlDbType.NVarChar, 50).Value = txtFamily.Text;
    //cmdup.Parameters.Add("@tahsilat", SqlDbType.NVarChar, 50).Value = txtTahsilat.Text;
    //cmdup.Parameters.Add("@adres", SqlDbType.NVarChar, 150).Value = txtAddress.Text;
    //cmdup.Parameters.Add("home_tel", SqlDbType.Char, 10).Value = txtHomeTel.Text;
    //cmdup.Parameters.Add("@celphone", SqlDbType.Char, 10).Value = txtTel.Text;
    //cmdup.Parameters.Add("@email", SqlDbType.VarChar).Value = txtEmail.Text;
    //cmdup.Parameters.Add("@sh_sh", SqlDbType.Char, 10).Value = txtShSh.Text;
    //cmdup.Parameters.Add("@shoghl", SqlDbType.NVarChar, 50).Value = txtShoghl.Text;
    //cmdup.Parameters.Add("@age", SqlDbType.Int).Value = txtAge.Text;
    //cmdup.Parameters.Add("@melli_code", SqlDbType.Char, 10).Value = txtIDnumber.Text;
    //cmdup.Parameters.Add("@id", SqlDbType.Int).Value = txtID.Text;

或者这个:

        //SqlCommand cmdup = new SqlCommand("EXEC up_st'" + txtName.Text. + "' , '" + txtFamily.Text + "' , '" + txtTahsilat.Text +"' , '" + txtAddress.Text + "' , '" 
    //                                   + txtHomeTel.Text + "' , '" + txtTel.Text + "' , '" + txtEmail.Text + "' , '" + txtShoghl.Text + "' , '"
    //                                   + txtAge.Text + "' , '" + txtFadername.Text + "' , '" + txtIDnumber.Text + "' , '" + txtShSh.Text + "' , '" 
    //                                   + txtID.Text + "'", conn);

或者这个:

        /*"update user_st set name='" + txtName.Text + "',fader_name='" + txtFadername.Text + "',family='" + txtFamily.Text + "',tahsilat='" + txtTahsilat.Text + "',adres='" + txtAddress.Text + "',home_tel='" + txtHomeTel.Text + "',celphone='" 
        + txtTel.Text + "',email='" + txtEmail.Text + "',sh_sh='" +                      txtShSh.Text + "',shoghl='" + txtShoghl.Text + "',age='" + txtAge.Text + "',melli_code='" + txtIDnumber.Text + "' where ID_st=" + txtID.Text*/

但它也不起作用。

1 个答案:

答案 0 :(得分:1)

您需要将初始Sql select移动到!IsPostback块中,因为发生的事情是您回发更新,但在更新文本框之前会激活Page_Load。所以一切都在您的初始代码中工作,您只需使用初始信息进行更新。试试这个:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        txtID.Text = Request.QueryString["id"].ToString();
        SqlConnection con = new SqlConnection(strcon);
        string query = "select * from user_st where ID_st = @id";
        SqlCommand cmd = new SqlCommand(query, con);
        cmd.Parameters.AddWithValue("@id", stid);
        con.Open();
        SqlDataReader dr = cmd.ExecuteReader();
        dr.Read();

        txtName.Text = dr["name"].ToString();
        txtFamily.Text = dr["family"].ToString();
        txtAddress.Text = dr["adres"].ToString();
        txtHomeTel.Text = dr["home_tel"].ToString();
        txtTahsilat.Text = dr["tahsilat"].ToString();
        txtTel.Text = dr["celphone"].ToString();
        txtEmail.Text = dr["email"].ToString();
        txtShoghl.Text = dr["shoghl"].ToString();
        txtAge.Text = dr["age"].ToString();
        txtFadername.Text = dr["fader_name"].ToString();
        txtIDnumber.Text = dr["melli_code"].ToString();
        txtShSh.Text = dr["sh_sh"].ToString();
    }
} 

如果你真的想从数据库中重新加载这些东西,你可以将该查询弹出到一个函数中,并在按钮点击功能(最后)点击更新后重新运行它,但实际上没有理由因为文本框已经有相同的信息。