0

我有一个带有 TemplateField 列的 GridView,它显示来自数据源的 DateTime。

<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。

当我切换到编辑模式时,将 TextBox 中的日期更改为“ 31-01-2013”​​并按 GridView 的更新链接我收到一个错误: 无法将参数“dtDateStart”的值从“System.String”转换为“System” .DateTime' 该错误是由 GridView 生成的,而不是我自己的代码。它发生在我的 DataSource 的 UpdateMethod 被调用之前。

当我输入“01-31-2012”时,数据被正确处理,值被更新到数据库中。

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

有人能帮帮我吗?

4

2 回答 2

0

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

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

我在我的类中添加了一个额外的属性,它是字符串类型的。这个属性我只用于绑定到gridview。

// 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);
    }
}

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

于 2013-02-05T06:52:22.003 回答
-1

我想你可以这样使用

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

        </EditItemTemplate>

这会帮助你。

于 2013-02-05T07:01:21.883 回答