VB.NET - Number(10,2)的DataGridView子串单元格

时间:2016-02-05 10:12:56

标签: vb.net datagridview substring variable-length

我有一个DataGridView,其中一列用户可以插入double。我必须在插入数据库之前控制单元格值,因为该表有一个数字(10,2)数据类型。

我目前的代码:

View view = inflater.inflate(mReactRootView. , container, false);

此处长度方法不合适,因为如果我的单元格包含“。”,则长度会增加。

示例:

Dim length As Integer = Nothing    
Dim row As Integer = DTG.CurrentCell.RowIndex
Dim column As Integer = DTG.CurrentCell.ColumnIndex()

With DTG(row).Cells(column)
    length = Len(.Value)
    If Not IsNothing(.Value) Then
            If Not IsNumeric(.Value) Then
                    .Value = 0
            End If

            If length > 10 Then
                    .Value = .Value.SubString(0, 10)
                    If .Value.Contains(".") Then
                        .Value = .Value.SubString(0, 9)
                    End If
            End If
    End If
End With

在第二种情况下,我需要插入1234567891 => length = 10 => insert : 1234567891 123456789.1 => length = 11 => insert : 123456789

有人可以告诉我吗?谢谢

3 个答案:

答案 0 :(得分:1)

您可以使用.Value.IndexOf(".")获取小数点分隔符之前的位数(< = 10)。

答案 1 :(得分:1)

如果我没有弄错,数据类型为]的数据库字段意味着它可以带有number(10,2)的最大值,使用此值可能会将您的代码更改为< / p>

99999999.99

我们首先将Dim dbMaxNum As Decimal = 99999999.99 With DTG(row).Cells(column) If Not IsNothing(.Value) Then If Not IsNumeric(.Value) Then .Value = 0 Else .Value = Math.Min( _ dbMaxNum, _ Math.Round(CDec(.Value), 2, MidpointRounding.AwayFromZero)) End If End If End With 舍入到两位小数,然后我们选择结果与数据库字段可容纳的最大值之间的最小值(.Value

选项99999999.99是为了防止意外的舍入结果,例如MidpointRounding.AwayFromZero四舍五入到32.625this question中出现的问题)。

答案 2 :(得分:-1)

我最终决定使用单元格值。

If .Value > 99999999.99 Then
    .Value = Convert.ToDouble(.Value.SubString(0, 8))
End If

我将样式格式更改为&#34; N2&#34;,因此用户不能写超过2位小数:

.ValueType = GetType(Double)
.Style.Format = "N2"

我还发现了另一种方法,我可以将我的列格式化为蒙版文本框。我稍后会尝试这个解决方案。

编辑: 之前的答案非常糟糕,但它帮了我一段时间。我找到了一个更好的方法来处理我的问题。我创建了一个函数来检查小数点前的位数,如果长度大于8,则返回False

Public Function numberDigitsBeforeDecimal(ByVal montant As Double) As Boolean
    Dim beforeDigit As String = montant.ToString.Substring(0, montant.ToString.IndexOf("."))

    If beforeDigit.Length > 8 Then
        Return False
    Else
        Return True
    End If
End Function