如何在 asp.net 中更新 GridView 的特定输入字段值时更改该行



我有一个表单,其中用户有两个日期输入字段(from_date,to_date(。

根据日期,计算天数并将其存储在第三个输入(天(中。

这种形式的数据存储在 SQL 数据库中。

此表在下一页上显示为网格视图,用户可以在其中编辑行数据。但是在更新行时,所有输入字段都会成功更新,但问题是number_of_days输入字段需要根据输入的两个日期自行更新。

但是我不知道我需要在哪里对逻辑进行编码才能更新网格视图中的第三个输入。

网格视图设计:

<asp:GridView ID="GridView1" CssClass="table table-bordered table-sm" runat="server" AutoGenerateColumns="False" DataKeyNames="Sr_No" DataSourceID="SqlDataSource1">
<Columns>
<asp:TemplateField HeaderText="Sr_No" InsertVisible="False" SortExpression="Sr_No">
<EditItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Eval("Sr_No") %>'></asp:Label>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("Sr_No") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>

<asp:TemplateField HeaderText="From_Date" SortExpression="From_Date">
<EditItemTemplate>
<asp:TextBox ID="TextBox2" runat="server" TextMode="Date" Text='<%# Bind("From_Date") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label3" runat="server" Text='<%# Bind("From_Date") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="To_Date" SortExpression="To_Date">
<EditItemTemplate>
<asp:TextBox ID="TextBox3" runat="server" TextMode="Date" Text='<%# Bind("To_Date") %>' OnChange="abc()"></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label4" runat="server" Text='<%# Bind("To_Date") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="No_Of_Days" SortExpression="No_Of_Days">
<EditItemTemplate>
<asp:TextBox ID="TextBox4" runat="server" Text='<%# Bind("No_Of_Days") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label5" runat="server" Text='<%# Bind("No_Of_Days") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>

<asp:TemplateField>  
<ItemTemplate>  
<asp:Button ID="btn_Edit" runat="server" CssClass="btn btn-info" Text="Edit" CommandName="Edit" />  
</ItemTemplate>  
<EditItemTemplate>  
<asp:Button ID="btn_Update" runat="server" CssClass="btn btn-primary" Text="Update" CommandName="Update"/>  
<asp:Button ID="btn_Cancel" runat="server" CssClass="btn btn-warning" Text="Cancel" CommandName="Cancel"/>  
</EditItemTemplate>  
</asp:TemplateField> 
</Columns>
</asp:GridView>

代码隐藏更新:

protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
Label Sr_No = GridView1.Rows[e.RowIndex].FindControl("Label1") as Label;
TextBox From = GridView1.Rows[e.RowIndex].FindControl("TextBox2") as TextBox;
TextBox To = GridView1.Rows[e.RowIndex].FindControl("TextBox3") as TextBox;
TextBox No = GridView1.Rows[e.RowIndex].FindControl("TextBox4") as TextBox;
con = new SqlConnection(connStr);
con.Open();
SqlCommand cmd = new SqlCommand("Update tablename set Sr_No='" + From_Date='" + From.Text + "',To_Date='" + To.Text + "',No='" + No.Text + "' where Sr_No=" + Convert.ToInt32(Sr_No.Text), con);
cmd.ExecuteNonQuery();
con.Close();
GridView1.EditIndex = -1;
ShowData();
}

您可以按如下方式编辑No_Of_Days模板字段

<asp:TemplateField HeaderText="No_Of_Days" SortExpression="No_Of_Days">
<EditItemTemplate>
<asp:TextBox ID="TextBox4" runat="server" Text='<%# (Convert.ToDateTime(Eval("To_Date"))!=null && Convert.ToDateTime(Eval("From_Date"))!=null)?(Convert.ToDateTime(Eval("To_Date"))-Convert.ToDateTime(Eval("From_Date"))).Days:0 %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label5" runat="server" Text='<%#  (Convert.ToDateTime(Eval("To_Date"))!=null && Convert.ToDateTime(Eval("From_Date"))!=null)?(Convert.ToDateTime(Eval("To_Date"))-Convert.ToDateTime(Eval("From_Date"))).Days:0 %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>

最新更新