如何将datagridview列中的值设置为记帐格式

时间:2017-08-13 13:30:15

标签: vb.net datagridview

这个怎么样,如果你愿意的话,你能为我做一点解决方案吗?

我有这个datagridview列(" Units"),其中包含负值;

Units
      3
     -3
      2
     -3
      3
     -2
Total 8

现在我想将负值转换为(3),如下所示;

    Units
      3
     (3)
      2
     (3)
      3
     (2)
Total 8

我该怎么做?非常感谢...

3 个答案:

答案 0 :(得分:0)

You can use case when as below:

Select Case when Units < 0 then concat('(',abs(units),')') else convert(varchar(5), units) end as Units from yourtable

答案 1 :(得分:0)

你可以这样做:

For Each row As DataGridViewRow In dgvSubjects.Rows
    If row.Cells(3).Value < 0
        row.Cells(3).Value = 3
    End If
Next

希望有所帮助:)

答案 2 :(得分:0)

考虑到列类型是字符串类型,一种可能的解决方案是使用NumberFormat来显示带括号的负数。 MSDN FormatNumber

第四个参数UseParensForNegativeNumbers可以设置为True,TriState常量。

Dim numberString As String = FormatNumber(number, 0,, TriState.True,)

这应该不需要去除负号并添加括号。下面是一个采用数字字符串并返回相同数字字符串的方法,除非字符串的数字值小于零(0),在这种情况下将返回删除了负号并添加括号的字符串。如果字符串不是数字,则返回原始字符串。

Private Function GetAccountingNumber(originalString As String) As String
  If (Not (String.IsNullOrEmpty(originalString))) Then
    Dim number As Integer
    If (Integer.TryParse(originalString, number)) Then
      If (number < 0) Then
        Return FormatNumber(number, 0,, TriState.True,)
      Else
        Return originalString
      End If
    Else
      Return originalString
    End If
  Else
    Return ""
  End If
End Function

鉴于此,您可能想要设置此格式的一个地方是为第3列触发网格CellValueChanged事件时。这将意味着单元格值已更改,如果它是负数,则您需要在用户离开单元格后格式化该单元格。网格CellValueChanged事件可能有助于此...如果单元格值更改在第3列中,那么我们要格式化单元格值。由于我们正在更改单元格值,因此在设置值之前,谨慎的做法是关闭此事件以避免重入错误。

Private Sub DataGridView1_CellValueChanged(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellValueChanged
  If (e.RowIndex >= 0 And e.ColumnIndex = 3) Then
    If (DataGridView1.Rows(e.RowIndex).Cells(3).Value IsNot Nothing) Then
      RemoveHandler DataGridView1.CellValueChanged, AddressOf DataGridView1_CellValueChanged
      DataGridView1.Rows(e.RowIndex).Cells(3).Value = GetAccountingNumber(DataGridView1.Rows(e.RowIndex).Cells(3).Value.ToString())
      AddHandler DataGridView1.CellValueChanged, AddressOf DataGridView1_CellValueChanged
    End If
  End If
End Sub

我猜这就是你要找的东西。希望它有所帮助。