asp.net gridview绑定dateformat无法使用更新

时间:2013-01-31 11:51:16

标签: asp.net datetime gridview date-format

我有一个带有TemplateField列的GridView,它显示了一个来自DataSource的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

有人可以帮帮我吗?

2 个答案:

答案 0 :(得分:0)

感谢您的回复。 我不知道网站内的文化设置。我假设用dateformat证明Bind函数就足够了。

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

我在我的类中添加了一个类型为string的属性。这个属性我只用于绑定到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);
    }
}

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

答案 1 :(得分:-1)

我认为你可以像这样使用

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

        </EditItemTemplate>

这将帮助你。