代码之家  ›  专栏  ›  技术社区  ›  Joel Coehoorn

基于数据类型为ASP.NET网格视图设置列格式

  •  1
  • Joel Coehoorn  · 技术社区  · 16 年前

    我有一个非常简单的ASP.NET页面,它充当存储过程的前端。它只运行该过程并使用GridView控件显示输出:总共不到40行代码,包括ASPX标记。存储过程本身非常…不稳定的。它有很多用途,输出格式会定期更改。

    整个过程非常好,因为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
    
    3 回复  |  直到 15 年前
        1
  •  2
  •   Robert    16 年前

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

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

    如果不是自动生成,并且网格中有编码列,那么您还可以知道哪些列是日期列,并且可以对该列应用相同的格式表达式。它有点像0:ddmmyyyy,但您必须查找它,因为这可能不太正确。

    所以总结一下钩住数据绑定事件。循环访问列集合并确定该列是否为日期列。我想知道你会怎么做。如果决定列是日期列,请设置其格式表达式。

    沃伊拉

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

    好吧,编写从proc返回数据以返回数据表的方法。格式化数据表中的数据后,可以将数据表绑定到网格。dataTable.columns集合是DataColumns的集合,这些集合具有DataType属性。您可能正在查找System.DateTime或DateTime,它可能是DataType属性本身的属性之一:。我知道这很麻烦,但你所要求的显然会很麻烦。一旦确定了日期列,您就可以对它做些什么了。

    如果没有,我将开始查看数据读卡器,看看您是否可以在那里或使用数据适配器做些什么。我希望我能给你一个正确的答案,但我认为不管你怎么做,都不会很漂亮。对不起的

        2
  •  2
  •   Eoin Campbell    16 年前

    如果使用显式绑定列是一个选项,请向BoundField添加一个dataFormatString

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

    否则,您可以考虑对GridView.OnRowDataBound事件进行格式化。

        3
  •  0
  •   Mischa Kroon    16 年前

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

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

    推荐文章