这个怎么样,如果你愿意的话,你能为我做一点解决方案吗?
我有这个datagridview列(" Units"),其中包含负值;
Units
3
-3
2
-3
3
-2
Total 8
现在我想将负值转换为(3),如下所示;
Units
3
(3)
2
(3)
3
(2)
Total 8
我该怎么做?非常感谢...
答案 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
我猜这就是你要找的东西。希望它有所帮助。