我有一个带有模板字段列的 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>
这个威尔对你有帮助。