【问题标题】:Format columns for ASP.Net GridView based on data type根据数据类型格式化 ASP.Net GridView 的列
【发布时间】:2010-09-20 00:56:27
【问题描述】:

我有一个非常简单的 ASP.Net 页面,它充当存储过程的前端。它只是运行程序并使用 gridview 控件显示输出:总代码不到 40 行,包括 aspx 标记。存储过程本身非常...易变。它有多种用途,输出格式会定期更改。

整个事情都很好,因为 gridview 控件并不真正需要关心存储过程返回哪些列:它只是在页面上显示它们,这正是我想要的。

但是,运行此操作的数据库在时间部分并不重要的地方都有许多日期时间列 - 它总是归零。我想要做的是控制gridview中日期时间列的格式,而不知道它们将是哪些列。每当结果中的列具有日期时间类型时,只需应用给定的格式字符串即可修剪时间组件。

我知道我可以在数据库中转换为 varchar,但我真的不想让开发人员关心查询中的格式,无论如何这属于表示级别。还有其他想法吗?


最终使用此代码以可接受(或至少改进)的方式使其工作:

Protected Sub OnRowDatabound(ByVal sender As Object, ByVal e As GridViewRowEventArgs)
    If e.Row.RowType = DataControlRowType.DataRow Then
        Dim d As DateTime
        For Each cell As TableCell In e.Row.Cells
            If Date.TryParse(cell.Text, d) AndAlso d.TimeOfDay.Ticks = 0 Then
                cell.Text = d.ToShortDateString()
            End If
        Next cell
    End If
End Sub

【问题讨论】:

    标签: asp.net datetime gridview asp.net-2.0


    【解决方案1】:

    如果您正在自动生成听起来像您的列。使用网格格式的过程很糟糕。

    您需要遍历网格的所有列,可能在数据绑定事件中,并将格式化表达式应用于您发现的任何列是日期列。

    如果您不是自动生成并且您在网格中对列进行了编码,您还将知道哪些列是日期列,并且您可以将相同的格式表达式应用于该列。它类似于 {0:ddMMyyyy},但您必须查找它,因为这可能不太正确。

    所以总结挂钩到数据绑定事件。遍历列集合并确定该列是否为日期列。我想知道你会如何做到这一点:)。如果您决定一列是日期列,请设置其格式表达式。

    ---------- 编辑

    好的,您如何编写从 proc 返回数据以返回数据表的方法。格式化数据表中的数据后,您可以将数据表绑定到网格。 datatable.Columns 集合是 DataColumns 的集合,它们具有 DataType 属性。您可能正在寻找 System.DateTime 或 DateTime,它可能是 DataType 属性本身的属性之一 :)。我知道这很麻烦,但是您要问的肯定会很麻烦。一旦您确定了日期列,您就可以使用它来做一些事情。

    如果没有,我会开始查看数据读取器,看看是否有什么可以在那里或使用数据适配器执行的操作。我希望我能给你一个正确的答案,但我认为无论你设法做到这一点,它都不会很漂亮。对不起

    【讨论】:

    • 这看起来是对的:我会在投票或接受之前等待更长时间,以便问题在未回答的选项卡上停留更长时间,但我会回复你。
    • 好的,我已经玩了一些了。很好,但我找不到在运行时获取控件中列类型的方法,即使我能找到在哪里设置格式表达式。
    【解决方案2】:

    如果可以选择使用显式绑定列,请将 DataFormatString 添加到您的 boundField

    <asp:BoundField DataField="Whatever" ... DataFormatString="{0:dd/MM/yyyy}" HtmlEncode="False"/ > 
    

    否则你可以考虑格式化 GridView.OnRowDataBound 事件

    【讨论】:

      【解决方案3】:

      您可以使用 isDate() 函数来查看某个日期是否为有效日期,然后使用日期格式选项使其看起来像您想要的那样。

      日期格式的一些例子: http://datawebcontrols.com/faqs/CustomizingAppearance/FormatDateTimeData.shtml

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-09-30
        • 1970-01-01
        • 1970-01-01
        • 2010-09-14
        • 2018-08-28
        • 2015-11-07
        • 2011-11-21
        相关资源
        最近更新 更多