C# 从textbox获取值以更新数据库中的数据

C# 从textbox获取值以更新数据库中的数据,c#,asp.net,textbox,C#,Asp.net,Textbox,我在数据列表中有一个文本框。我正在使用文本框将数据更新到数据库。到目前为止,我可以访问文本框,但我得到的是文本框的旧值,而不是更新后的值 这是数据列表中的我的文本框 <asp:DataList ID="profileDl" runat="server" OnItemDataBound="findMYcontrol" > <ItemTemplate> <div class="col-md-12 " > <h2 class="btn btn-pr

我在数据列表中有一个文本框。我正在使用文本框将数据更新到数据库。到目前为止,我可以访问文本框,但我得到的是文本框的旧值,而不是更新后的值

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

    <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>
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;
    }
}
但是我在
会话[var]
中获得了旧的已经存在的值。我如何获得刚刚输入到文本框中的值

我试图用textbox中的值替换该值

 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函数中,您应该执行以下操作:

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.
}
这样,当您单击“编辑”时,您将从回发中收到输入的值。如果在加载的每个页面中填充文本框,而不仅仅是在If(!IsPostBack)中,则会发生以下情况:

  • 点击页面加载,文本框值设置为“某些文本”。您的页面将显示给您,textbox1.text现在是“一些文本”
  • 将文本框内的文本更改为“测试”,然后单击编辑配置文件
  • 当您单击按钮时,回发发生,首先,点击页面加载,因此您的文本框值再次设置为“某些文本”
  • 只有在页面加载之后,才会调用函数,这就是为什么会再次得到旧值

  • So-仅填写if子句内的文本框,在其中检查它是否为回发。:)

    您是否在任意点用现有数据填充文本框,以及在流中的何处发生这种情况?您可能在回发之前重新填充数据,然后重新保存我在clickevent中调用的
    gettbId
    函数,该函数在文本框中填充新值后单击。您应该在if(!IsPostBack)或Not?if我在中调用此函数时绑定数据列表!page.ispostback,它将采用现有值,因为只有在单击导致回发的编辑按钮后,文本框中的值才会更新。不是吗?如果我在
    中调用此函数!page.ispostback
    ,它将采用现有值,因为只有在单击编辑按钮后,文本框中的值才会更新,如果此处指的是(page.ispostback),则可能会导致回发。并确保您没有检查PageInit上的textbox值,它仅在PageLoad事件之前加载,因此这可能是您应该使用的。当它是回发时(即单击编辑按钮时),应该在中调用从textbox获取值的函数!Page.IsPostback,您应该填写文本框(设置的初始值-稍后覆盖的值)。就像我说的,我怀疑你在页面加载时填写了初始值,所以每次页面加载时,当你的按钮函数被调用时,你的值都是最初填写的值。我会编辑我原来的帖子,给我一分钟,让我的答案更清楚。
    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.
    }