Je travaille actuellement sur un projet où je suis désireux de montrer une mise à jour d'état lors de la construction des machines virtuelles. J'ai une fonction qui construit une liste de noms et "prime" la liste. Je pousse alors ceci à un Sapien DataGridView.Fonction de mise à jour personnalisée PSObject pour DataGridView
Le premier fonctionne très bien. Mais j'ai une deuxième fonction que je veux utiliser pour mettre à jour ce statut. Lorsque je mets à jour le statut, il supprime toutes les autres entrées de l'objet ou les duplique. J'ai aussi quelques fois j'appelle cette fonction, il dit qu'il ne peut pas trouver le $VMName
même si je le vois dans ma sortie verbeuse.
function Set-Prime($NameArray) {
$results = @()
foreach ($Name in $namearray) {
$OBJ = New-Object -TypeName PSObject
$OBJ | Add-Member -MemberType NoteProperty -Name VMName -Value "$Name"
$OBJ | Add-Member -MemberType NoteProperty -Name Status -Value "Primed"
$results += $OBJ
Load-DataGridView $datagridview1 -Item $results
$OBJ = $null
}
}
function Update-DataGridView($VMName, $Status) {
$Update = $results | where { $_.VMName -eq $VMName }
Write-Host $Update
$Update.Status = "$Status"
[array]$results += $Update
Load-DataGridView $datagridview1 -Item $results
}
EDIT:
Function Create-Names
{
$namearray = @()
[int]$i = $RangeS.Text
[int]$e = $RangeE.Text
$e++
$Prefix = $tPrefix.Text
do
{
$Suffix = "{0:000}" -f $i
$namearray += $Prefix + $Suffix
$i++
}
until ($i -eq $e)
return $namearray
}
La fonction Update-DataGridView
se fait à différentes parties quand je viens d'appeler pour définir l'état.
Voici le Load-DataGridView.
function Load-DataGridView
{
<#
.SYNOPSIS
This functions helps you load items into a DataGridView.
.DESCRIPTION
Use this function to dynamically load items into the DataGridView control.
.PARAMETER DataGridView
The DataGridView control you want to add items to.
.PARAMETER Item
The object or objects you wish to load into the DataGridView's items collection.
.PARAMETER DataMember
Sets the name of the list or table in the data source for which the DataGridView is displaying data.
#>
Param (
[ValidateNotNull()]
[Parameter(Mandatory=$true)]
[System.Windows.Forms.DataGridView]$DataGridView,
[ValidateNotNull()]
[Parameter(Mandatory=$true)]
$Item,
[Parameter(Mandatory=$false)]
[string]$DataMember
)
$DataGridView.SuspendLayout()
$DataGridView.DataMember = $DataMember
if ($Item -is [System.ComponentModel.IListSource]`
-or $Item -is [System.ComponentModel.IBindingList] -or $Item -is [System.ComponentModel.IBindingListView])
{
$DataGridView.DataSource = $Item
}
else
{
$array = New-Object System.Collections.ArrayList
if ($Item -is [System.Collections.IList])
{
$array.AddRange($Item)
}
else
{
$array.Add($Item)
}
$DataGridView.DataSource = $array
}
$DataGridView.ResumeLayout()
}
Nous avons besoin de savoir comment la fonction est appelée pour pouvoir vous aider avec précision. De plus, nous aurions besoin de savoir ce que 'Load-DataGrid' est afin de dire pourquoi vous obtenez des doublons. – TheMadTechnician
Message modifié avec les informations demandées. – Doug