[英]Trying to update a ASP.NET(C#) gridview datetime field
我在asp.net中将gridview连接到sqldatasource,并检查了编辑选项。 我有两个要更新的字段,一个名为CHECKTIME(data type datetime)
和CHECKTYPE
。 我可以用gridview更新CHECKTYPE
,没有问题,但是当我尝试更新CHECKTIME
它没有变化,而是保留了原始值。 请帮忙; 在下面找到我正在使用的更新查询。
查询:
UPDATE CHECKINOUT SET CHECKTYPE = @CHECKTYPE, CHECKTIME = @CHECKTIME
FROM CHECKINOUT INNER JOIN USERINFO
ON CHECKINOUT.USERID = USERINFO.USERID
WHERE (CHECKINOUT.USERID = @USERID) AND (CHECKINOUT.trans = @trans)
updategridview.aspx
<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="TimeClockManager.aspx.cs" Inherits="TimeClockViewer.WebForm1" %>
<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="FeaturedContent" runat="server">
</asp:Content>
<asp:Content ID="Content3" ContentPlaceHolderID="MainContent" runat="server">
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:attConnectionString %>" SelectCommand="SELECT USERINFO.USERID, USERINFO.NAME, USERINFO.TITLE, CHECKINOUT.CHECKTIME, CHECKINOUT.CHECKTYPE FROM USERINFO INNER JOIN CHECKINOUT ON USERINFO.USERID = CHECKINOUT.USERID
WHERE ( NAME = @NAME and @NAME<> '-1' OR @NAME = '-1' and 1=1) AND CHECKTIME BETWEEN @startDate AND @endDate + ' 23:59:00.000'" UpdateCommand="UPDATE CHECKINOUT SET CHECKTYPE = @CHECKTYPE, CHECKTIME = convert(datetime,@CHECKTIME)
FROM CHECKINOUT INNER JOIN USERINFO ON CHECKINOUT.USERID = USERINFO.USERID
WHERE (CHECKINOUT.USERID = @USERID) AND (CHECKINOUT.trans = @trans)">
<SelectParameters>
<asp:ControlParameter ControlID="ddlEmployee" Name="NAME" PropertyName="SelectedValue" />
<asp:ControlParameter ControlID="txtBoxStartDate" Name="startDate" PropertyName="Text" />
<asp:ControlParameter ControlID="txtBoxEndDate" Name="endDate" PropertyName="Text" />
</SelectParameters>
<UpdateParameters>
<asp:Parameter Name="CHECKTYPE" />
<asp:Parameter Name="CHECKTIME" />
<asp:Parameter Name="USERID" />
<asp:Parameter Name="trans" />
</UpdateParameters>
</asp:SqlDataSource>
Employee:
<asp:DropDownList ID="ddlEmployee" runat="server" DataSourceID="SqlDataSource2" DataTextField="NAME" DataValueField="NAME" Height="40px" Width="193px" AppendDataBoundItems="True">
<asp:ListItem Value="-1">All</asp:ListItem>
</asp:DropDownList>
Start Date:
<asp:TextBox ID="txtBoxStartDate" runat="server" Width="146px"></asp:TextBox>
End Date<ajaxToolkit:CalendarExtender ID="txtBoxStartDate_CalendarExtender" runat="server" Enabled="True" TargetControlID="txtBoxStartDate">
</ajaxToolkit:CalendarExtender>
:
<asp:TextBox ID="txtBoxEndDate" runat="server" Width="146px"></asp:TextBox>
<ajaxToolkit:CalendarExtender ID="txtBoxEndDate_CalendarExtender" runat="server" Enabled="True" TargetControlID="txtBoxEndDate">
</ajaxToolkit:CalendarExtender>
<asp:Button ID="btnSubmit" runat="server" Text="Submit" />
<asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:attConnectionString %>" SelectCommand="SELECT [NAME] FROM [USERINFO] ORDER BY [NAME]"></asp:SqlDataSource>
<br />
<asp:GridView ID="GridView1" runat="server" DataSourceID="SqlDataSource1" AutoGenerateColumns="False" CellPadding="4" ForeColor="#333333" GridLines="None" DataKeyNames="USERID">
<AlternatingRowStyle BackColor="White" />
<Columns>
<asp:CommandField ShowEditButton="True" />
<asp:BoundField DataField="USERID" HeaderText="USERID" InsertVisible="False" SortExpression="USERID" ReadOnly="True" />
<asp:BoundField DataField="NAME" HeaderText="NAME" SortExpression="NAME" />
<asp:BoundField DataField="TITLE" HeaderText="TITLE" SortExpression="TITLE" />
<asp:BoundField DataField="CHECKTIME" HeaderText="CHECKTIME" SortExpression="CHECKTIME" />
<asp:BoundField DataField="CHECKTYPE" HeaderText="CHECKTYPE" SortExpression="CHECKTYPE" />
</Columns>
<EditRowStyle BackColor="#7C6F57" />
<FooterStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" />
<HeaderStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="#666666" ForeColor="White" HorizontalAlign="Center" />
<RowStyle BackColor="#E3EAEB" />
<SelectedRowStyle BackColor="#C5BBAF" Font-Bold="True" ForeColor="#333333" />
<SortedAscendingCellStyle BackColor="#F8FAFA" />
<SortedAscendingHeaderStyle BackColor="#246B61" />
<SortedDescendingCellStyle BackColor="#D4DFE1" />
<SortedDescendingHeaderStyle BackColor="#15524A" />
</asp:GridView>
</asp:Content>
我认为这是在gridview编辑模式下尝试更新使用数据源归档的日期时间时的典型问题。 我认为问题在于数据源试图将文本值分配给datetime字段,并且如果它在任何情况下都无法转换(因为数据库接受yyyy-MM-dd格式的datetime),它将忽略它。
解决这个问题的一种方法是使用网格视图的OnRowUpdating事件。 将OnUpdating事件添加到GridView
OnRowUpdating="GridView1_RowUpdating"
在OnRowUpdating事件中,捕获文本框值并将其分配给数据源
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
GridViewRow row = GridView1.Rows[e.RowIndex];
//Get the correct cell number of your datetime field
var dateTimeString = row.Cells[4].Controls[0] as TextBox;
if (dateTimeString != null)
{
DateTime dateTime;
if (DateTime.TryParse(dateTimeString.Text, out dateTime))
SqlDataSource1.UpdateParameters["CHECKTIME"].DefaultValue = dateTime.ToString("yyyy-MM-dd HH:mm:ss");
}
}
但是,还有其他类似的解决方案,如下所示,您可以在更新时尝试在ASP.Net GridView中格式化DateTime,而无需使用c#
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.