【问题标题】:ASP.NET 3.5 GridView Template Field Display Date If Not MinValue?ASP.NET 3.5 GridView 模板字段显示日期,如果不是 MinValue?
【发布时间】:2011-03-22 22:45:40
【问题描述】:

我对 ASP.NET 有一个相当简单的问题。我有一个带有模板字段的网格视图。在模板字段中,我有一个标签。我正在尝试将标签文本属性设置为绑定列中指定的日期如果日期时间值不是最小值(换句话说,日期时间字段尚未设置)。我真的不知道该怎么做。我在下面给出了一些我尝试过的代码,以便更清楚地了解我想要完成的工作:

        <asp:TemplateField HeaderText="Start Date">
            <ItemTemplate>
                <asp:Label ID="startDateLabel" runat="server"
                    Text='<%# if (Eval("StartDate") == DateTime.MinValue) { "None" } else { Eval("StartDate") } %>'>
                </asp:Label>
            </ItemTemplate>
        </asp:TemplateField>

这是我请求的对象数据源的代码:

<asp:ObjectDataSource ID="projectDataSource" runat="server" 
    SelectMethod="GetProjects" TypeName="Lemur.Services.Impl.ProjectService">
</asp:ObjectDataSource>

这是从对象数据源返回的类:

public class Project
{
    #region Private Fields

    private Client _client;

    #endregion

    #region Public Properties

    public Guid ID { get; set; }
    public string Name { get; set; }
    public string Abbreviation { get; set; }
    public string Description { get; set; }
    public Guid ClientID { get; set; }
    public Client Client
    {
        get
        {
            if (_client == null)
            {
                _client = new Client();
            }

            return _client;
        }
        set
        {
            _client = value;
        }
    }
    public ProjectStatus ProjectStatus { get; set; }
    public Employee ProjectManager { get; set; }
    public Guid ProjectManagerID { get; set; }
    public bool Active { get; set; }
    public DateTime StartDate { get; set; }
    public DateTime EndDate { get; set; }

    #endregion

    #region Overrides

    public override string ToString()
    {
        return Name;
    }

    #endregion
}

我要检索的字段是 StartDate。

有人对如何实现这一点有任何想法吗?

感谢您的帮助。

【问题讨论】:

  • 你要绑定什么?在数据源而不是在 GridView 中执行此操作可能更容易。
  • 我正在绑定到一个对象数据源。
  • 您能发布 ObjectDataSource 的代码吗?
  • 我更新了我的问题以包含对象数据源代码,以及从对象数据源返回的类。

标签: asp.net gridview templatefield


【解决方案1】:

在使用 Project 类代码更新我的帖子后,我意识到尝试将 if 语句集成到 TemplateField 中似乎很草率。我决定向 Project 类添加一个名为 StartDateString 的属性,其中包含我想在视图层执行的逻辑。这样我就可以为 StartDateString 属性创建一个 Bound 字段:

    public string StartDateString
    {
        get
        {
            if (StartDate == DateTime.MinValue)
            {
                return "";
            }
            else
            {
                return StartDate.ToString("dd/MM/yyyy");
            }
        }
    }

我猜我是从错误的方向来解决问题的......

【讨论】:

  • 这正是我要建议的。 +1。
【解决方案2】:

我意识到这篇文章已经过时了,但我也遇到了同样的问题(过去曾这样做过,但我忘记了如何解决它)。在其他地方找到了解决方案,提出的想法可能对寻求相同的其他人有用。总之……

在您的类中使用可为空的 DataTime 类型。 “约会时间?”而不是“日期时间”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-10
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 2015-11-03
    • 1970-01-01
    相关资源
    最近更新 更多