繁体   English   中英

尝试更新ASP.NET(C#)gridview日期时间字段

[英]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&lt;&gt; '-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>
&nbsp;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>
&nbsp;&nbsp;&nbsp; Start Date:

    <asp:TextBox ID="txtBoxStartDate" runat="server" Width="146px"></asp:TextBox>

&nbsp;&nbsp;&nbsp; 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>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    <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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM