0

私は 2 つのページを持っています。ページ 1 には が含まれてgridviewおりlinkbutton、ID を別のページ (ページ 2) に渡すページを作成しました。2 ページ目には 10 個textboxの es があり、情報を編集するためのボタンが 1 つあります。

このコードはページ 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*/

しかし、それも機能しません。

4

1 に答える 1

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

本当にデータベースから内容をリロードしたい場合は、そのクエリを関数にポップして、ボタン クリック関数のボタン クリック更新 (最後) の後に再実行できますが、テキスト ボックスがすでに同じ情報を持っています。

于 2012-09-30T20:53:16.440 に答える