asp.net - 如何在asp.net中修改Bind ("MyValue")

标签 asp.net gridview timezone linqdatasource

我对时间值和多个时区感到头疼。 我以 UTC 时间存储新的 DateTime 值,但当我尝试使用 LinqDataSource 和 GridView 修改它们时遇到问题。

我可以轻松地显示正确的时间

<ItemTemplate>
    <asp:Label ID="Label1" runat="server" Text='<%# TimeManager.ToLocalTime((DateTime)Eval("OrderDate")) %>' />
</ItemTemplate>

目前,这将使数据库中存储的 UTC 时间增加 1 小时。

但是,绑定(bind)回源并不容易。 Bind("OrderDate") 不能像 TimeManager.ToGlobalTime((DateTime)Bind("OrderDate")) 那样进行修改。

我正在考虑使用 LinqDataSource 的 OnUpdating 事件将值更新为全局时间,但是如果用户修改其他字段而不是日期字段怎么办?他每次更新记录的时间值都会小一小时。

比较新旧值也不是很好,因为用户可以修改日期时间的日期部分而不是时间,这受时区的影响?

如果我有办法在 gridview 的所有状态中显示本地时间,那么我可以轻松使用 LinqDataSource 的 OnUpdating。

请分享您的想法...

最佳答案

您是否考虑过更改您的模型?我们假设您要绑定(bind)的对象的名称是 CustomerOrder。您可以将以下类添加到您的项目中(与 Linq 对象位于同一命名空间中):

public partial class CustomerOrder
{
    public DateTime LocalOrderDate
    {
        get { return TimeManager.ToLocalTime(OrderDate); }
        set { OrderDate = TimeManager.ToUTCTime(value); }
    }
}

现在,不再绑定(bind)到 OrderDate,而是绑定(bind)到 LocalOrderDate。这将自动将 UTC/本地时间转换为 OrderDate。

(注意:我假设您已正确定义 TimeManager.ToLocalTime() 和 TimeManager.ToUTCTime())

关于asp.net - 如何在asp.net中修改Bind ("MyValue"),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/520013/

相关文章:

Azure SQL 数据库 - 如何更改时区设置?

c# - 如何在时区之间转换时间(UTC 到 EDT)?

Java 时区时间格式

javascript - 警告框消失,无需单击 ASP.NET 中的“确定”按钮

c# - 如何在c#中保存点击计数器

asp.net - 将多个容器上载到Azure容器注册表

asp.net - 在文本周围单击时如何获得 asp.net 超链接控件以导航到 URL?

c# - 对启用分页的 gridview 进行排序

c# - 无法从列表中获取值以便设置网格 header 值 c#

java - Android GridView 滚动循环