【问题标题】:IsNumeric function extremly slowIsNumeric 函数极慢
【发布时间】:2014-03-20 11:58:13
【问题描述】:

有我从数据库中填充的 gridview,现在我想右对齐 gridview 中的所有数字项,但是如果 IsNumeric(row.Cells(i).Text) statment 需要很长时间,还有其他方法可以解决这个问题吗?

代码:

以其他方式将数字向右对齐需要很长时间

             For Each row As GridViewRow In Me.gwResult.Rows
                For i As Integer = 0 To headCell - 1
                    If IsNumeric(row.Cells(i).Text) Then
                        row.Cells(i).HorizontalAlign = HorizontalAlign.Right
                    End If
                Next
            Next

【问题讨论】:

  • 您是否针对列的数据类型尝试了特定的 TryParse?
  • 您应该知道表中(在数据库中)列的类型。你为什么要使用IsNumeric() 来解决你已经知道的事情?
  • @dav1dsm1th 是正确的,除非此列包含混合值(一些字符串和一些数字)。请解释
  • 首先,我无法访问每一列,这就是我这样做的原因,其次,gridview 是动态的,因此有时会有更多的“列”是数字的。跨度>
  • 您是将 GridView 绑定到通用列表还是数据表?

标签: asp.net vb.net gridview isnumeric


【解决方案1】:

您在绑定DataSource 后使用此代码来识别数值,这将增加额外的时间来分析网格数据。尝试在 gridview 的 RowDataBound 事件上使用相同的代码。

【讨论】:

  • 为什么会更快??
  • 因为对于所有行,RowDataBound 将被执行(如果存在)。然后您可以在绑定时检查每个行调用的值。在您的情况下,网格是绑定的,然后循环遍历每一行和每个单元格以分析值。
  • 但我的问题是,例如,第 0 列是字符串,第 1 列是数字,第 2 列是字符串,所以我不能将一行作为数字然后我宁愿使用列,但我还没有弄清楚如何修复 gridview 给你的列。
  • 在行数据绑定事件中,您也可以访问每个单元格及其值。 msdn.microsoft.com/en-us/library/…
【解决方案2】:

您最好的选择是在将网格绑定到数据源之前找出哪些列是数字的。在GridViewRowDataBound 事件中,您可以检查当前正在数据绑定的列是否在numericColumns 集合中。

'Find numeric properties of the type beehing databound
Dim numericColumns = New HashSet(GetType(MyDataType).GetProperties() _
                     .Where(Function(x) IsNumericType(x.PropertyType)))
                     .Select(Function(x) x.Name))

'And for DataTable it would look like this
Dim numericColumns = New HashSet(dt.Columns.Cast(Of DataColumn)() _
                     .Where(Function(x) IsNumericType(x.DataType))) _
                     .Select(Function(x) x.ColumnName))

Private Shared Function IsNumericType(dataType As Type) As Boolean
   Dim code = CInt(Type.GetTypeCode(dataType ))
   Return code >= 4 AndAlso code <= 15
End Function

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-12
    • 2013-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多