Я пытаюсь отсортировать размер столбца (КБ) в следующем списке. Столбец Размер (КБ) сортируется на основе текстового значения, которое не соответствует ожидаемому результату. Я получаю правильные результаты для всех других столбцов
# Defining the listbox fo displaying the search results
$lvw_resultsListView = New-Object System.Windows.Forms.ListView -Property @{
View = [System.Windows.Forms.View]::Details
Location = New-Object System.Drawing.Size(10, 40)
Width = 700
Height = 350
Scrollable = $true
MultiSelect = $true
Font = 'Arial,10'
AutoSize = $true
Sorting = "Ascending"
FullRowSelect = $true
GridLines = $True
}
Вот код, который добавляет столбцы в список
# Adding Columns to List View
$lvw_resultsListView.columns.Add("Filename", 150) | Out-Null
$lvw_resultsListView.columns.Add("Path", 340) | Out-Null
$lvw_resultsListView.columns.Add("Size (kb)", 90) | Out-Null
$lvw_resultsListView.columns.Add("Created on", 70) | Out-Null
$lvw_resultsListView.columns.Add("Ext", 60) | Out-Null
Вот код, который добавляет значения из файлового объекта
# Clearing list view items
$lvw_resultsListView.Items.Clear()
# Adding file information to the list bx by cycling through each file
foreach ($file in $global:files) {
$fileItem = New-Object System.Windows.Forms.ListViewItem( $file.BaseName)
$fileItem.Subitems.Add($file.FullName) | Out-Null
$fileItem.Subitems.Add($file.Length) | Out-Null
$tempCreationDate = $file.CreationTime | Get-Date -f "yyyy-MM-dd"
$fileItem.Subitems.Add($tempCreationDate) | Out-Null
$fileItem.Subitems.Add($file.Extension) | Out-Null
$lvw_resultsListView.Items.Add($fileItem) | Out-Null
}
А вот функция сортировки, которая вызывается при щелчке столбца
function SortListView {
Param(
[System.Windows.Forms.ListView] $senderPsItem,
$column
)
$temp = $senderPsItem.Items | Foreach-Object { $_ }
$Script:SortingDescending = !$Script:SortingDescending
$senderPsItem.Items.Clear()
$senderPsItem.ShowGroups = $false
$senderPsItem.Sorting = 'none'
if($column.Text -eq "Size (kb)") {
$senderPsItem.Items.AddRange(($temp | Sort-Object -Descending:$script:SortingDescending -Property @{ Expression={ [int]$_.SubItems[$column].Text } }))
} else {
$senderPsItem.Items.AddRange(($temp | Sort-Object -Descending:$script:SortingDescending -Property @{ Expression={ $_.SubItems[$column].Text } }))
}
}
Здесь (фрагмент из формы результатов) пример результата, который я получаю для столбца Размер (КБ)
Вот код, вызывающий функцию сортировки
$lvw_resultsListView.Add_ColumnClick({SortListView $this $_.Column})
Может ли кто-нибудь предложить способ улучшить мою функцию сортировки, чтобы правильно отсортировать целочисленный столбец. Я попытался преобразовать тест в целое число с помощью метода [int], как видно из функции сортировки? Заранее спасибо!
Write-Host $temp
под назначением переменной и щелкните столбец, который вы хотите отсортировать, это поможет понять, почему ваша функция не работает. Совет: вы можете посмотреть наDataGridView
сDataTable
в качестве источника данных. Кодировать будет намного проще. - person Santiago Squarzon   schedule 16.04.2021