在datagridview中选择多行

时间:2015-02-08 16:37:07

标签: powershell datagridview

我有以下脚本在所有驱动器中搜索PST文件并在datagridview中显示它们。 当我想将PST文件复制到新位置时,我一次只能选择1个文件。有没有办法可以选择多行(PST文件)并将它们复制到一起去?

#Generated Form Function
function GenerateForm {
########################################################################
# Code Generated By: SAPIEN Technologies PrimalForms (Community Edition) v1.0.10.0
# Generated On: 05/02/2015 13:48
# Generated By: Andy
########################################################################

#region Import the Assemblies
[reflection.assembly]::loadwithpartialname("System.Windows.Forms") | Out-Null
[reflection.assembly]::loadwithpartialname("System.Drawing") | Out-Null
#endregion

#region Generated Form Objects
$form1 = New-Object System.Windows.Forms.Form
$statusBar = New-Object System.Windows.Forms.StatusBar
$btn_copy = New-Object System.Windows.Forms.Button
$btn_close = New-Object System.Windows.Forms.Button
$btn_Search = New-Object System.Windows.Forms.Button
$dataGrid1 = New-Object System.Windows.Forms.DataGridview
$InitialFormWindowState = New-Object System.Windows.Forms.FormWindowState
#endregion Generated Form Objects

#----------------------------------------------
#Generated Event Script Blocks
#----------------------------------------------

function Get-PSTInfo {
        $statusbar.text = "Searching "
        $array = New-Object System.Collections.ArrayList
        $Script:pstinfo = Get-PSDrive -PSProvider "filesystem"|%{get-childitem $_.root -include *.pst -r}|select name, directoryname, @{name="Size (GB)";expression ={"{0:N2}" -f ($_.length/1GB)}}
        $array.AddRange($pstinfo)
        $dataGrid1.DataSource = $array
        $dataGrid1.autosize = $false
        $form1.refresh()
        $statusbar.text = "Finished Searching"
        $array|Export-Csv c:\temp\pstfound.csv -notypeinformation
        }

$btn_close_OnClick= 
{
$form1.close()
}

$btn_copy_OnClick= 
{
    $Outlook = New-Object -Com Outlook.Application
    $Outlook.Quit()
    sleep 5
    $selection = $datagrid1.selectedrows[0].databounditem
    $file=$selection.fullname
    $file|Out-File -Encoding ascii -filepath "C:\temp\pstcopied.txt" -append
    copy $file c:\temp
}

$btn_Search_OnClick= 
{
    $strFileName = "c:\temp\pstfound.csv"
        If (Test-Path $strFileName){
            Remove-Item $strFileName
            }   
    get-pstinfo
}

$OnLoadForm_StateCorrection=
{#Correct the initial state of the form to prevent the .Net maximized form issue
    $form1.WindowState = $InitialFormWindowState
}

#----------------------------------------------
#region Generated Form Code
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 417
$System_Drawing_Size.Width = 610
$form1.ClientSize = $System_Drawing_Size
$form1.DataBindings.DefaultDataSourceUpdateMode = 0
$form1.Icon = [System.Drawing.Icon]::ExtractAssociatedIcon('D:\Documents\SAPIEN\PowerShell Studio 2012\Files\atsign.ico')
$form1.Name = "form1"
$form1.Text = "PST Search"

$statusBar.DataBindings.DefaultDataSourceUpdateMode = 0
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 0
$System_Drawing_Point.Y = 395
$statusBar.Location = $System_Drawing_Point
$statusBar.Name = "statusBar"
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 22
$System_Drawing_Size.Width = 610
$statusBar.Size = $System_Drawing_Size
$statusBar.TabIndex = 4

$form1.Controls.Add($statusBar)


$btn_copy.DataBindings.DefaultDataSourceUpdateMode = 0

$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 126
$System_Drawing_Point.Y = 357
$btn_copy.Location = $System_Drawing_Point
$btn_copy.Name = "btn_copy"
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 28
$System_Drawing_Size.Width = 82
$btn_copy.Size = $System_Drawing_Size
$btn_copy.TabIndex = 3
$btn_copy.Text = "Copy"
$btn_copy.UseVisualStyleBackColor = $True
$btn_copy.add_Click($btn_copy_OnClick)

$form1.Controls.Add($btn_copy)


$btn_close.DataBindings.DefaultDataSourceUpdateMode = 0

$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 242
$System_Drawing_Point.Y = 357
$btn_close.Location = $System_Drawing_Point
$btn_close.Name = "btn_close"
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 28
$System_Drawing_Size.Width = 82
$btn_close.Size = $System_Drawing_Size
$btn_close.TabIndex = 2
$btn_close.Text = "Close"
$btn_close.UseVisualStyleBackColor = $True
$btn_close.add_Click($btn_close_OnClick)

$form1.Controls.Add($btn_close)


$btn_Search.DataBindings.DefaultDataSourceUpdateMode = 0

$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 13
$System_Drawing_Point.Y = 357
$btn_Search.Location = $System_Drawing_Point
$btn_Search.Name = "btn_Search"
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 28
$System_Drawing_Size.Width = 82
$btn_Search.Size = $System_Drawing_Size
$btn_Search.TabIndex = 1
$btn_Search.Text = "Search"
$btn_Search.UseVisualStyleBackColor = $True
$btn_Search.add_Click($btn_Search_OnClick)

$form1.Controls.Add($btn_Search)

$dataGrid1.DataBindings.DefaultDataSourceUpdateMode = 0
$dataGrid1.DataMember = ""
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 13
$System_Drawing_Point.Y = 13
$dataGrid1.Location = $System_Drawing_Point
$dataGrid1.Name = "dataGrid1"
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 335
$System_Drawing_Size.Width = 579
$dataGrid1.Size = $System_Drawing_Size
$dataGrid1.TabIndex = 0

$form1.Controls.Add($dataGrid1)

#endregion Generated Form Code

#Save the initial state of the form
$InitialFormWindowState = $form1.WindowState
#Init the OnLoad event to correct the initial state of the form
$form1.add_Load($OnLoadForm_StateCorrection)
#Show the Form
$form1.ShowDialog()| Out-Null

} #End Function

#Call the Function
GenerateForm

1 个答案:

答案 0 :(得分:1)

我在other question无意中解决了这个问题。您需要设置DataGridView

的这些属性
$dataGridView.SelectionMode = 'FullRowSelect'
$dataGridView.MultiSelect = $true

在我的示例中,这是我将数据作为PowerShell对象检索的方式。代码已添加到按钮on_click事件

$dataGridView.SelectedRows| ForEach-Object{
    $global:results += [pscustomobject]@{
        Name = $dataGridView.Rows[$_.Index].Cells[0].Value
        Path = $dataGridView.Rows[$_.Index].Cells[1].Value
        TypeText = $dataGridView.Rows[$_.Index].Cells[2].Value
        Size = $dataGridView.Rows[$_.Index].Cells[3].Value
}