簡體   English   中英

vb.net - 按數字對 datagridview 列進行排序

[英]vb.net - Sort datagridview column numerically

我知道這個問題已經被問過很多次了,但我對大多數其他頁面上的解決方案都有疑問。

我有一個 datagridview 列,我想按數字排序(1、2、10 而不是 1、10、2)最好我可以在網上看到,我需要將列或單元格轉換為 integer 值類型 - 但我我不知道該怎么做。

我試過grid.columns(4).valuetype = typeof(System.int32) ,並分別對單元格進行了相同的嘗試。

上面的嘗試總是導致“int32 是‘系統’中的一種類型,不能用作表達式”錯誤——我不確定。

數據本身是從文本文件中獲取的,並在添加到單元格數據時從字符串轉換為 integer datagrid_alltracks.Rows(shutupaboutlambda).Cells(4).Value = CInt(numstring))

您可以只設置 DataGridView SortCompare 事件來比較兩個整數(或兩個單數,或兩個雙數)。 明智的代碼(調用你的 datagridview “grid”)

Private Sub grid_SortCompare(sender as Object, e as DataGridViewSortCompareEventArgs) Handles grid.SortCompare
    e.SortResult = CInt(e.cellvalue1).CompareTo(CInt(e.cellValue2))
    e.Handled = True
End Sub

如果您正在執行單變量或雙變量,請使用 CSng 或 CDbl 而不是 CInt

    e.SortResult = CSng(e.cellvalue1).Compareto(CSng(e.CellValue2) 

如果您願意,您可以進行更多花哨的排序,您基本上需要知道 e.SortResult 是正數、負數或零,並且您的單元格根據該結果進行排序(正保持順序,負反向順序,零 - 匹配 - 什么都不做(還))。 當前行索引和列在 e 參數中可用,因此如果當前單元格匹配,您還可以比較相鄰列數據)

如果網格綁定到數據源,您可以嘗試datatable.Columns.Add("ColumnName", GetType(Integer))

否則,您可能需要在 gridview 上使用SortCompare事件。 看這里

我知道我來晚了,但我發現一旦我添加了數據,我需要將所需的列轉換為具有數據類型。

我正在添加如下數據:

DataGridView1.Rows.Add(New String() {CInt(recordnum), True, "play", wszName.ToString, qiOffset.ToString, value.ToString, qiLength.ToString})

然后,在添加所有數據后,我會執行一個簡單的循環並轉換該列,然后我可以在其中對其進行排序。 它的設置使您可以根據需要進行多列操作。

Dim colnum As Integer
colnum = 0 ' set this as your column to change the data type to

For i As Integer = 0 To DataGridView1.Rows.Count - 1
    Dim d As Double = Double.Parse(DataGridView1.Rows(i).Cells(colnum).Value.ToString())
    DataGridView1.Rows(i).Cells(colnum).Value = CInt(d)
    DataGridView1.Rows(i).Cells(colnum).ValueType = GetType(Double)
Next

排序適用於您調整的任何列。 在本例中,它是第 4 列。

DataGridView1.Sort(DataGridView1.Columns(4), System.ComponentModel.ListSortDirection.Ascending)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM