asp.net 网格视图绑定日期格式不适用于更新



我有一个带有模板字段列的 GridView,该列显示来自数据源的日期时间。

<Columns>
    <asp:CommandField ShowEditButton="True" />
    <asp:TemplateField HeaderText="Start Date">
        <EditItemTemplate>
            <asp:TextBox ID="txtDateStart" runat="server" 
                Text='<%# Bind("dtDateStart", "{0:dd/MM/yyyy}") %>'</asp:TextBox>
        </EditItemTemplate>
        <ItemTemplate>
            <asp:Label ID="Label1" runat="server" 
                Text='<%# Bind("dtDateStart", "{0:dd/MM/yyyy}") %>'></asp:Label>
         </ItemTemplate>
    </asp:TemplateField>
</Columns>

以正确的格式显示日期可以正常工作。请注意,格式以 DAY 开头,后跟 MONTH。

当我切换到编辑模式时,将文本框中的日期更改为"31-01-2013",然后按 GridView 的更新链接,我收到错误:无法将参数"dtDateStart"的值从"System.String"转换为"System.DateTime"该错误是由 GridView 而不是我自己的代码生成的。它发生在调用我的数据源的更新方法之前。

当我键入"01-31-2012"时,数据得到正确处理,值将更新到数据库中。

不知何故,当显示日期时,它使用格式 dd-MM-yyyy(就像我需要的那样)但是当它从文本框中读取新值时,它使用 MM-dd-yyyy

有人可以帮我吗?

感谢您的回复。我不知道网站中的文化设置。我假设用日期格式证明 Bind-函数就足够了。

到目前为止,我已经实施了以下解决方法,希望对其他人有用:

我在我的类中添加了一个额外的属性,它是字符串类型。此属性我仅用于绑定到网格视图。

// Original Date property //
public DateTime dtDateStart { get; set; }
// Additional Date property of type string // 
public string sDateStart
{
    get
    {
        return dtDateStart.ToString("dd/MM/yyyy");
    }
    set
    {
        dtDateStart = DateTime.ParseExact(value, "dd/MM/yyyy", null);
    }
}

我不确定这是否应该标记为答案。但也许其他人也可以将其用作快速解决方法。

我认为你可以这样使用

         <EditItemTemplate>
            <asp:TextBox ID="txtDateStart" runat="server" 
                Text='<%# Convert.ToDateTime(Bind("dtDateStart")).ToString("dd/MM/yyyy") %>'</asp:TextBox>
        </EditItemTemplate>

这个威尔对你有帮助。

相关内容

  • 没有找到相关文章

最新更新