【问题标题】:ASP/VB .NET Formatting every row of a gridview?ASP/VB .NET 格式化gridview 的每一行?
【发布时间】:2009-09-14 19:52:41
【问题描述】:

我有一个 Gridview,它有一个时间戳作为行之一。当我从数据库中读取数据时,数据格式为( mm/dd/yyyy hh:mm:ss )。我已经想出了如何格式化我想要的方式,它只是 (mm/dd/yyyy) 和 (hh:mm:ss) 的删除,代码如下:

  Dim numrows2 = GridView1.Rows.Count
  For i = 0 To numrows2 - 1
        Dim acc = Left(GridView1.Rows(i).Cells(0).Text, 10)
        GridView1.Rows(i).Cells(0).Text = acc
  Next i

问题是这个 gridview 有 5 个页面,这仅适用于当前页面。例如,

  1. 页面的初始加载第一页将被正确格式化
  2. 我点击第3页,这段代码会格式化第1页,所以不会格式化第3页
  3. 我点击第1页,代码会格式化第3页

所以它基本上是格式化当前页面,而不是选定的页面。

我要么需要能够每次都格式化 gridview 的每一行,要么能够找出所选页面并格式化该页面。我也不知道怎么办。

任何帮助将不胜感激。

【问题讨论】:

    标签: .net asp.net vb.net gridview


    【解决方案1】:

    像这样在数据列中使用格式:

    <asp:BoundField HeaderText="Date" DataField="SomeDate" DataFormatString="{0:MM/dd/yyyy}">
    

    【讨论】:

      【解决方案2】:

      你使用边界域吗?

      有一个名为 DataFormatString 的属性,要获取您想要的格式,请将其设置为“MM/dd/yyyy”,那么您根本不需要在后面的代码中进行任何格式化

      【讨论】:

      • 附加的链接 klablanche 比我的例子好得多
      【解决方案3】:

      使用 DataFormatString,但不要忘记添加 HtmlEncode="false"

      <asp :BoundField DataField="DateColumn"
       DataFormatString="{0:MM/dd/yyyy}"
       HtmlEncode="false" />
      

      【讨论】:

        【解决方案4】:

        您可以在设计时或运行时使用某些属性为所需日期设置列的格式,它将对所有行执行此操作。

        这是一个关于它的教程。有一个很好的表格,你可以使用.... http://shawpnendu.blogspot.com/2009/04/how-to-format-gridview-rowscolumns-in.html

        【讨论】:

          【解决方案5】:

          您想要做的是使用 RowDataBound 事件并在此时进行数据绑定。 DateTime 对象的 ToString 方法可以根据你需要的格式代码重写。这样做你会这样做:

             Private Sub FormatMyGridView _
                         (ByVal sender As Object, _
                          ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) _
                     Handles gvMyGridView.RowDataBound
          
                Dim drItems As DataRow
          
                ' Grid Column Layout (Handy for formatting multiple items)
                ' 0 - View Details Hyperlink
                ' 1 - Id
                ' 2 - Department #
                ' 3 - Request Type
                ' 4 - Employee Number
                ' 5 - Employee Name
                ' 6 - Status
                ' 7 - Effective Date
          
                If e.Row.RowType = DataControlRowType.DataRow Then
          
                   drRequest =DirectCast(e.Row.DataItem, System.Data.DataRowView).Row
          
                   e.Row.Cells(7).Text = drItems.MyDateField.ToString("MM/dd/yyyy")
          
                End If    
          
             End Sub
          

          【讨论】:

            【解决方案6】:

            执行此操作的最佳方法可能是使用 ObjectDataSource 并绑定到它,您可以在那里格式化日期数据并返回一些业务对象。 ObjectDataSource 还允许比简单的 SqlDataSource 更有效的分页(我假设这就是您正在使用的?)。

            如果您只是在运行动态 SQL 查询,则可以在那里格式化返回的数据(类似):

            SELECT CONVERT(VARCHAR, CONVERT(DATETIME, OriginalDateValue, 101), 101)

            这有帮助吗?如果您需要 ObjectDataSource 的特定代码,请直接说出来。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2023-03-29
              • 2018-04-02
              • 2011-07-02
              • 1970-01-01
              • 1970-01-01
              • 2018-02-21
              相关资源
              最近更新 更多