2017-08-13 65 views
0

如何使這一個,如果您介意的話,您可以爲我解決這個問題嗎?如何使datagridview列中的值轉換爲會計格式

我有這個datagridview列(「單位」),其中有負值;

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

現在我想將負值轉換爲(3)像這樣,下面;

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

我該怎麼做?非常感謝......

+0

您希望每個負值等於3或每個負值變爲正值(如-3→3和-2→2)? –

+0

否。例如,我的值-3出現在datagridview中,但是,而不是-3,我想使它成爲(3),就像在Excel中的會計格式一樣。 – Diaval

+0

DGV列包括能夠更改數據的顯示格式 – Plutonix

回答

0

您可以使用情況下,如下:

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

可以是這樣做的:

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

希望它能幫助:)

+0

它不會更改任何其他解決方案的值? – Diaval

+0

@Diaval。 'Cells(3)'是包含數字的銷售嗎? –

+0

@Diaval,就是這麼簡單,你可以在這裏看到它[clip](https://www.dropbox.com/s/w0xdjahjbxgdyji/Clip_4.mp4?dl=0)。 –

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 

鑑於此,一個地方,你可能要設置這種格式是當電網CellValueChanged事件是第3列解僱這意味着細胞值改變,如果它是一個負數,你會想在用戶離開單元格後格式化該單元格。網格CellValueChanged事件可能會對此有所幫助...如果單元格值發生了變化,那麼我們要格式化單元格值。由於我們正在更改單元格值,因此在設置值之前,請謹慎關閉此事件以避免重入錯誤。

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 

我猜這是你在找什麼。希望能幫助到你。

相關問題