从文本框中获取值以更新数据库中的数据

本文关键字:数据库 更新 数据 文本 获取 | 更新日期: 2023-09-27 18:17:43

我在Datalist里面有一个文本框。我正在使用文本框更新数据到数据库。到目前为止,我能够访问文本框,但我得到的文本框的旧值,而不是更新的值。

这是我在数据列表中的文本框。

    <asp:DataList ID="profileDl" runat="server" OnItemDataBound="findMYcontrol" >
<ItemTemplate>

<div class="col-md-12 " >
<h2 class="btn btn-primary btn-block profile">Profile</h2>
<asp:Image ID="imgP" runat="server" ImageUrl='<%#Eval("pp_path")%>' Height="115px" Width="150px" />
</div>
<%-- <div class="row well">--%>
<div class="col-md-12" >
<table>
<tr class="img" >
<td><asp:FileUpload ID="profileUP" runat="server" Height="35px" Width="80px" CssClass="pp" placeholder="okay" /></td>
<td>&nbsp;&nbsp;<asp:LinkButton ID="SelectButton" runat="server" Width="65px"  Height="35px" OnClick="picClick" Class="btn btn-default plus"><i class=" glyphicon glyphicon-plus  "></i>&nbsp;Add</asp:LinkButton></td>
</tr>
</table>
<asp:PlaceHolder ID="profile_tb" runat="server">
<asp:Table ID="tbl_profile_edit" runat="server" CssClass="tbl_plbl" >
<asp:TableRow>
<asp:TableCell CssClass="tc_constants" >UserName: </asp:TableCell>
<asp:TableCell><asp:TextBox ID="Label7" CssClass="tb" runat="server" Text='<%# Eval("name")%>'/> </asp:TableCell>
</asp:TableRow>
<asp:TableRow>
<asp:TableCell  CssClass="tc_constants" >Real Name:</asp:TableCell>
<asp:TableCell><asp:TextBox ID="Label8" CssClass="tb" runat="server" Text='<%# Eval("name")%>'/></asp:TableCell>
</asp:TableRow>
<asp:TableRow>
<asp:TableCell  CssClass="tc_constants">Email:</asp:TableCell>
<asp:TableCell><asp:TextBox ID="Label9" CssClass="tb" runat="server" Text='<%# Eval("email")%>'/></asp:TableCell> 
</asp:TableRow>
<asp:TableRow>
<asp:TableCell  CssClass="tc_constants">Address:</asp:TableCell>
<asp:TableCell><asp:TextBox ID="Label10" CssClass="tb" runat="server" Text='<%# Eval("address")%>'/></asp:TableCell> 
</asp:TableRow>  
<asp:TableRow>
<asp:TableCell  CssClass="tc_constants">Sex:</asp:TableCell>
<asp:TableCell><asp:TextBox ID="Label11" CssClass="tb" runat="server" Text='<%# Eval("sex")%>'/></asp:TableCell>
</asp:TableRow> 
<asp:TableRow>
<asp:TableCell  CssClass="tc_constants">Account:</asp:TableCell>
<asp:TableCell><asp:TextBox ID="Label12" CssClass="tb" runat="server" Text='<%# Eval("acType")%>'/></asp:TableCell>
</asp:TableRow>
</asp:Table>
<asp:Button ID="editmyprofile" class="btn btn-default btn-block editbutt" runat="server" OnClick="savemyP" Text="save" />
</asp:PlaceHolder>

</div>
<%--  </div>--%>
</ItemTemplate>
</asp:DataList>

这就是我试图访问文本框值的方式。

 protected void gettbId()
{
     string[] st = new string[tbl_pedit.Rows.Count];
       int i= 0;
        foreach (TableRow tr in tbl_pedit.Rows)
        {
            foreach (TableCell tc in tr.Cells)
            {
                foreach (TextBox tb in tc.Controls)
                {
                    st[i] = tb.Text;
                    i++;
                }
            }
        }
        Session["val1"] = st[0].ToString();
        Session["val2"] = st[1].ToString();
        Session["val3"] = st[2].ToString();
        Session["val4"] = st[3].ToString();
        Session["val5"] = st[4].ToString();
        Session["val6"] = st[5].ToString();

}

tbl_pedit被访问为

public void findMYcontrol(object sender, DataListItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        Table tb = (Table)e.Item.FindControl("tbl_profile_edit");
        tbl_pedit = tb;
    }
}

但是我得到旧的已经存在的值在session[var] .我怎么得到的值我刚刚输入到文本框

我正在尝试用文本框中的值替换值。

 public void savemyP(object sender, EventArgs e)
{
    gettbId();
    string st = Session["userid"].ToString();
    string nam = Session["val1"].ToString();
    //string em = Session["val3"].ToString();
    string ad = Session["val4"].ToString();
    string sex = Session["val5"].ToString();
    //string  = Session["val6"].ToString();
    string em = tb_email.Text;
    sq.connection();
    SqlCommand cmd = new SqlCommand("update register set name=@name, address=@address, email =@email, sex=@sex  where reg_id ='" + st + "' ", sq.con);
    cmd.Parameters.AddWithValue("@name",nam);
    cmd.Parameters.AddWithValue("@address",ad);
    cmd.Parameters.AddWithValue("@email",em);
    cmd.Parameters.AddWithValue("@sex",sex);
    //cmd.Parameters.AddWithValue("@fulname",fn);
    cmd.ExecuteNonQuery();
    sq.con.Dispose();
    sq.con.Close();

}

从文本框中获取值以更新数据库中的数据

是否在

中填充文本框的值
if(!Page.IsPostBack) {
    -- Should fill textboxes here
}

在你的page_load?如果没有,则每次页面加载时所写的值都会被覆盖,因此请确保仅在请求不是回发时才填充文本框值。

编辑:

在每次加载页面时调用的Page_Load函数中,您应该这样做:

if(!Page.IsPostBack) {
    Label7.Text = "Your text"; // fill the initial values here, so they are only written once and not overwritten when you click the edit button.
}

这样,当您单击编辑时,您将从回发中接收输入的值。如果您在每个page_load中填充文本框,而不仅仅是在If (!IsPostBack)中,则会发生以下情况:

  1. 你点击Page_Load,你的文本框值被设置为"Some text"。您的页面显示给您,textbox1。文本现在是"Some text"
  2. 将文本框内的文字改为"Test",点击编辑配置文件
  3. 当你点击按钮,回发发生,首先,page_load被击中,所以你的文本框值再次设置为"Some text"
  4. 只有在Page_Load之后,你的函数被调用-这就是为什么你再次得到旧值

So -只填写if子句内的文本框,在那里你检查它不是回发。:)