我有一个带有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
有人可以帮帮我吗?
答案 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>
这将帮助你。