C# 如何在回发后将文本保存到绑定数据库数据的texbox中
下面是组成gridview的模板字段之一。标签和文本框的所有值都来自数据库,我想重点关注这个特定的文本框,以下是aspx代码:C# 如何在回发后将文本保存到绑定数据库数据的texbox中,c#,asp.net,gridview,C#,Asp.net,Gridview,下面是组成gridview的模板字段之一。标签和文本框的所有值都来自数据库,我想重点关注这个特定的文本框,以下是aspx代码: <asp:TemplateField HeaderText="ServiceStart" SortExpression="ServiceStart"> <EditItemTemplate> <asp:TextBox ID="txtEditServiceStart" runat="server" typ
<asp:TemplateField HeaderText="ServiceStart" SortExpression="ServiceStart">
<EditItemTemplate>
<asp:TextBox ID="txtEditServiceStart" runat="server" type="date" Text='<%# Bind("ServiceStart","{0:d}") %>' Width="128px"></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="LblItemServiceStart" runat="server" Text='<%# Bind("ServiceStart","{0:d}") %>' ></asp:Label>
</ItemTemplate>
</asp:TemplateField>
以下是如何编辑、取消编辑、更新的代码:
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "EditRow")
{
int rowIndex = ((GridViewRow)((LinkButton)e.CommandSource).NamingContainer).RowIndex;
GridView1.EditIndex = rowIndex;
BindGrid();
}
else if (e.CommandName == "CancelUpdate")
{
GridView1.EditIndex = -1;
BindGrid();
}
else if (e.CommandName == "UpdateRow")
{
int rowIndex = ((GridViewRow)((LinkButton)e.CommandSource).NamingContainer).RowIndex;
string ContractNo = ((TextBox)GridView1.Rows[rowIndex].FindControl("txtEditContractNo")).Text;
string contractDate = ((TextBox)GridView1.Rows[rowIndex].FindControl("txtEditContractDate")).Text;
string contractDuration = ((TextBox)GridView1.Rows[rowIndex].FindControl("txtEditContractDuration")).Text;
string serviceStart = ((TextBox)GridView1.Rows[rowIndex].FindControl("txtEditServiceStart")).Text;
string contractDetails = ((TextBox)GridView1.Rows[rowIndex].FindControl("txtEditContractDetails")).Text;
string contractValue = ((TextBox)GridView1.Rows[rowIndex].FindControl("txtEditContractValue")).Text;
string DropDownServed = ((DropDownList)GridView1.Rows[rowIndex].FindControl("DropDownServed")).Text;
AccessLayer.UpdateContract(ContractNo, contractDate, contractDuration, serviceStart, contractDetails, contractValue, DropDownServed);
GridView1.EditIndex = -1;
BindGrid();
}
}
AccessLayer=更新合同:
public static int UpdateContract(string ContractNo, string ContractDate, string ContractDuration, string ServiceStart, string ContractDetails, string ContractValue, string Served)
{
string css = ConfigurationManager.ConnectionStrings["dbx"].ConnectionString;
using (SqlConnection con = new SqlConnection(css))
{
string UpdateQuery = "UPDATE SCHOLARSHIPCONTRACT SET ContractDate= @ContractDate, ContractDuration = @ContractDuration, ServiceStart = @ServiceStart, ContractDetails = @ContractDetails, ContractValue= @ContractValue, Served = @Served WHERE ContractNo =@ContractNo";
SqlCommand UpdateCmd = new SqlCommand(UpdateQuery, con);
SqlParameter paramOriginalContractNo = new SqlParameter("ContractNo", ContractNo);
UpdateCmd.Parameters.Add(paramOriginalContractNo);
SqlParameter paramContractDate = new SqlParameter("@ContractDate", ContractDate);
UpdateCmd.Parameters.Add(paramContractDate);
SqlParameter paramContractDuration = new SqlParameter("@ContractDuration", ContractDuration);
UpdateCmd.Parameters.Add(paramContractDuration);
SqlParameter paramServiceStart = new SqlParameter("@ServiceStart", ServiceStart);
UpdateCmd.Parameters.Add(paramServiceStart);
SqlParameter paramContractDetails = new SqlParameter("@ContractDetails", ContractDetails);
UpdateCmd.Parameters.Add(paramContractDetails);
SqlParameter paramContractValue = new SqlParameter("@ContractValue", ContractValue);
UpdateCmd.Parameters.Add(paramContractValue);
SqlParameter paramServed = new SqlParameter("@Served", Served);
UpdateCmd.Parameters.Add(paramServed);
con.Open();
return UpdateCmd.ExecuteNonQuery();
}
}
请建议我可以在aspx或c代码中添加的方式/方法谢谢你你的问题是你总是更新你的合同日期。您必须编辑查询字符串。Add COALESCE将为ContractDate分配一个值,如果已填充该值,则该值为:@ContractDate,否则它将分配ContractDate的现有值。将方法中ContractDate的类型更改为?DateTime,它允许您将其放入方法null中。当你们调用这个方法时,若日期被编辑,只需勾选文本框,若并没有设置为空,就把它放在方法中
public static int UpdateContract(string ContractNo, DateTime? ContractDate, string ContractDuration, string ServiceStart, string ContractDetails, string ContractValue, string Served)
{
string css = ConfigurationManager.ConnectionStrings["dbx"].ConnectionString;
using (SqlConnection con = new SqlConnection(css))
{
string UpdateQuery = "UPDATE SCHOLARSHIPCONTRACT SET ContractDate=COALESCE(@ContractDate=ContractDate), ContractDuration = @ContractDuration, ServiceStart = @ServiceStart, ContractDetails = @ContractDetails, ContractValue= @ContractValue, Served = @Served WHERE ContractNo =@ContractNo";
SqlCommand UpdateCmd = new SqlCommand(UpdateQuery, con);
UpdateCmd.Parameters.AddWithValue("ContractNo", ContractNo);
//Here you have to convert string to DateTime
UpdateCmd.Parameters.AddWithValue("@ContractDate", ContractDate);
UpdateCmd.Parameters.AddWithValue("@ContractDuration", ContractDuration);
UpdateCmd.Parameters.AddWithValue("@ServiceStart", ServiceStart);
UpdateCmd.Parameters.AddWithValue("@ContractDetails", ContractDetails);
UpdateCmd.Parameters.AddWithValue("@ContractValue", ContractValue);
UpdateCmd.Parameters.AddWithValue("@Served", Served);
con.Open();
return UpdateCmd.ExecuteNonQuery();
}
}
更新后的日期也是1900年1月1日,单位为db?我怀疑您在加载页面时绑定了网格。你能分享一些你的代码吗?或者确保你做了绑定,如果!页IsPostback@mwisnicki没错,1/1/1900也在数据库中,你可以把你的代码,显示你如何更新这些数据。我想问题出在你的更新方法上。@Ted你是对的,这里有一个小代码:受保护的无效页面_loadobjectsender,EventArgs e{if!IsPostBack{BindGrid;}很抱歉,我对问题的第一个描述是错误的。请再看一次我的问题,我用图片更新了它。基本上,我只需要在gridview中再次显示数据,如果它不是由用户编辑的,而不是显示1/1/1900。我希望你能帮助我,谢谢~需要从ContractDate==Coalesciv中删除额外的等号签名e更新了AccessLayer更新契约,现在在GridView1_row命令中:否则,如果e.CommandName==UpdateRow,我将其从字符串更改为DateTime DateTime contractDate=TextBoxGridView1.Rows[rowIndex].FindControltxtEditContractDate.Text;及其给我的错误:无法将类型字符串隐式转换为System.DateTime。我想这是因为我在BindGrid中声明了字符串??有什么想法吗?谢谢大家,请建议其他方法调用SQL语句,而不使用字符串SQL=Select…,请注意,查询具有连接状态T以便我可以将ContractDate称为DateTime。或者您是否有其他建议,感谢我在声明SQL查询以绑定数据时将字符串替换为var。您能告诉我如何将字符串转换为DateTime,如回答中所述^Thank
public static int UpdateContract(string ContractNo, DateTime? ContractDate, string ContractDuration, string ServiceStart, string ContractDetails, string ContractValue, string Served)
{
string css = ConfigurationManager.ConnectionStrings["dbx"].ConnectionString;
using (SqlConnection con = new SqlConnection(css))
{
string UpdateQuery = "UPDATE SCHOLARSHIPCONTRACT SET ContractDate=COALESCE(@ContractDate=ContractDate), ContractDuration = @ContractDuration, ServiceStart = @ServiceStart, ContractDetails = @ContractDetails, ContractValue= @ContractValue, Served = @Served WHERE ContractNo =@ContractNo";
SqlCommand UpdateCmd = new SqlCommand(UpdateQuery, con);
UpdateCmd.Parameters.AddWithValue("ContractNo", ContractNo);
//Here you have to convert string to DateTime
UpdateCmd.Parameters.AddWithValue("@ContractDate", ContractDate);
UpdateCmd.Parameters.AddWithValue("@ContractDuration", ContractDuration);
UpdateCmd.Parameters.AddWithValue("@ServiceStart", ServiceStart);
UpdateCmd.Parameters.AddWithValue("@ContractDetails", ContractDetails);
UpdateCmd.Parameters.AddWithValue("@ContractValue", ContractValue);
UpdateCmd.Parameters.AddWithValue("@Served", Served);
con.Open();
return UpdateCmd.ExecuteNonQuery();
}
}