如何解决使用 Powershell 表单中的整数值对 Listview 控件列进行排序
我正在尝试对以下列表视图中的“大小 (kb)”列进行排序。 “大小 (kb)”列根据文本值进行排序,这不是预期的结果。我得到了所有其他列的正确结果
# 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 } }))
}
}
这里(结果表单的片段)是我为“大小(kb)”列获得的示例结果
这里是调用排序函数的代码
$lvw_resultsListView.Add_ColumnClick({SortListView $this $_.Column})
有人可以建议一种方法来改进我的排序功能以正确对整数列进行排序。从排序函数中可以看出,我尝试使用 [int] 方法将测试转换为整数? 提前致谢!
解决方法
用于检查“大小 (kb)”列的 IF 条件不正确。列索引用于解决此问题。
改变了
if($column.Text -eq "大小 (kb)")
到
if($column -eq 2)
我更新了排序函数以更正 IF 条件
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'
Write-Host $column
if($column -eq 2) {
$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 } }))
}
}
这给出了整数列的正确结果。
,在这里,试试这段代码,它会帮助你理解我为什么提到 epochs = 10
optimizer = "adam"
loss = "sparse_categorical_crossentropy"
metrics = ["accuracy"]
#Model for Classification
model = Sequential()
model.add(LSTM(50))
model.add(Dense(len(labels) + 1,activation="softmax"))
model.compile(loss=loss,optimizer=optimizer,metrics=metrics)
和 DataGridView
,这对我在使用 WPF 时产生了很大的影响。
尝试对 DataTable
和 *Time
列进行排序,您就会明白原因:)
Length
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。