I have created a GUI with the purpose of deleting a row from a SQL table.
I am now stuck on having the results show one at a time as a button is pressed.
Screenshot of GUI:
If I have three results come back, it will show the first result in the text box, then when the Next button is pressed, it skips over the second result and shows the last one.
Debugging shows that it definitely finds three results, but its like I need to stop it between results until the button is pressed to move to the next one. I have tried many things, but have had no luck.
Here is the code (sorry there is quite a bit. The part I am stuck on it near the bottom):
<#
.NAME
Remove A File
#>
Start-Transcript -path "c:\path\RemoveScipt.txt"
$StaticData = "C:\path\Static Data.csv"
$SQLServer = "SERVERNAME"
$DB = "DATABASENAME"
Add-Type -AssemblyName System.Windows.Forms
[System.Windows.Forms.Application]::EnableVisualStyles()
$RemoveFile = New-Object system.Windows.Forms.Form
$RemoveFile.ClientSize = New-Object System.Drawing.Point(530,510)
$RemoveFile.text = "Remove a script"
$RemoveFile.TopMost = $false
$ScriptName = New-Object system.Windows.Forms.Label
$ScriptName.text = "Script Name"
$ScriptName.AutoSize = $true
$ScriptName.width = 25
$ScriptName.height = 10
$ScriptName.location = New-Object System.Drawing.Point(14,20)
$ScriptName.Font = New-Object System.Drawing.Font('Microsoft Sans Serif',10)
$ReportName = New-Object system.Windows.Forms.Label
$ReportName.text = "Report Name"
$ReportName.AutoSize = $true
$ReportName.width = 25
$ReportName.height = 10
$ReportName.location = New-Object System.Drawing.Point(14,50)
$ReportName.Font = New-Object System.Drawing.Font('Microsoft Sans Serif',10)
$Result = New-Object system.Windows.Forms.Label
$Result.text = "Is this the script you wish to remove?"
$Result.AutoSize = $true
$Result.width = 25
$Result.height = 10
$Result.location = New-Object System.Drawing.Point(14,110)
$Result.Font = New-Object System.Drawing.Font('Microsoft Sans Serif',10)
$ScriptNameCombo = New-Object system.Windows.Forms.ComboBox
$ScriptNameCombo.width = 337
$ScriptNameCombo.height = 20
$ScriptNameCombo.location = New-Object System.Drawing.Point(120,19)
$ScriptNameCombo.Font = New-Object System.Drawing.Font('Microsoft Sans Serif',10)
$ScriptNameSQL ="SELECT distinct Script_Name FROM TABLE"
$ScriptNameCall = Invoke-Sqlcmd -ServerInstance $SQLServer -Database $DB -Query $ScriptNameSQL
$ScriptNameCombo.Items.AddRange($ScriptNameCall.Script_Name) #ADDS ITEMS TO A DROPDOWN LIST
$ReportNameCombo = New-Object system.Windows.Forms.ComboBox
$ReportNameCombo.width = 337
$ReportNameCombo.height = 20
$ReportNameCombo.location = New-Object System.Drawing.Point(120,49)
$ReportNameCombo.Font = New-Object System.Drawing.Font('Microsoft Sans Serif',10)
$GoBut = New-Object system.Windows.Forms.Button
$GoBut.text = "Go!"
$GoBut.width = 45
$GoBut.height = 25
$GoBut.location = New-Object System.Drawing.Point(470,18)
$GoBut.Font = New-Object System.Drawing.Font('Microsoft Sans Serif',10)
$GoBut.BackColor =[System.Drawing.Color]::LightGreen
$Go2But = New-Object system.Windows.Forms.Button
$Go2But.text = "Go!"
$Go2But.width = 45
$Go2But.height = 25
$Go2But.location = New-Object System.Drawing.Point(470,48)
$Go2But.Font = New-Object System.Drawing.Font('Microsoft Sans Serif',10)
$Go2But.BackColor =[System.Drawing.Color]::LightGreen
$NextBut = New-Object system.Windows.Forms.Button
$NextBut.text = "Next"
$NextBut.width = 70
$NextBut.height = 30
$NextBut.location = New-Object System.Drawing.Point(242,103)
$NextBut.Font = New-Object System.Drawing.Font('Microsoft Sans Serif',10)
$NextBut.BackColor =[System.Drawing.Color]::FloralWhite
$ResultText = New-Object system.Windows.Forms.TextBox
$ResultText.multiline = $true
$ResultText.width = 500
$ResultText.height = 325
$ResultText.scrollbars = "Both"
$ResultText.WordWrap = $false
$ResultText.location = New-Object System.Drawing.Point(14,135)
$ResultText.Font = New-Object System.Drawing.Font('Microsoft Sans Serif',10)
$RemoveScript = New-Object system.Windows.Forms.Button
$RemoveScript.text = "Remove the script"
$RemoveScript.width = 150
$RemoveScript.height = 30
$RemoveScript.location = New-Object System.Drawing.Point(14,470)
$RemoveScript.Font = New-Object System.Drawing.Font('Microsoft Sans Serif',10)
$CancelBut = New-Object system.Windows.Forms.Button
$CancelBut.text = "Cancel"
$CancelBut.width = 150
$CancelBut.height = 30
$CancelBut.location = New-Object System.Drawing.Point(365,470)
$CancelBut.Font = New-Object System.Drawing.Font('Microsoft Sans Serif',10)
$CancelBut.BackColor =[System.Drawing.Color]::IndianRed
$RemoveFile.controls.AddRange(@($ScriptName,$ReportName,$RemoveScript,$ScriptNameCombo,$ReportNameCombo,$GoBut,$ResultText,$Result,$Go2But,$CancelBut,$NextBut))
$GoBut.Add_Click({
#USES WHAT WAS CHOSEN FROM THE FIRST DROPDOWN LIST TO FIND ANY ENTRIES WITH THAT ITEM IN THE FIRST COLUMN TO CREATE A SECOND DROPDOWN LIST. THIS IS TO SHORTEN THE RESULTS
$ReportNameLinkedSQL="SELECT distinct Report_Name FROM TABLE where Script_Name = '$($ScriptNameCombo.text)'"
$ReportNameCallLinked= Invoke-Sqlcmd -ServerInstance $SQLServer -Database $DB -Query $ReportNameLinkedSQL
if ($ScriptNameCombo.text.length -eq 0){[System.Windows.Forms.MessageBox]::Show('Ya gotta select a Script, buddy!','Uh oh','OK','Error')}else{
$ReportNameCombo.Items.AddRange($ReportNameCallLinked.Report_Name)}
})
$Go2But.Add_Click({
#THIS USES THE PREVIOUS TWO SELECTIONS TO FIND ALL MATCHING ROWS IN THE DATABASE WITH THOSE TWO ITEMS IN THE FIRST TWO COLUMNS. IT WILL SHOW THE FIRST RESULT IN THE TEXT BOX
$FullScriptSQL="SELECT * FROM TABLE where Script_Name = '$($ScriptNameCombo.text)' and Report_Name = '$($ReportNameCombo.text)'"
$global:FullScriptCallLinked= @(Invoke-Sqlcmd -ServerInstance $SQLServer -Database $DB -Query $FullScriptSQL)
$count=$FullScriptCallLinked.count
$nl = "`r`n"
if ($ScriptNameCombo.text.length -eq 0){[System.Windows.Forms.MessageBox]::Show('Ya gotta select a Script, buddy!','Uh oh','OK','Error')}
elseif($ReportNameCombo.text.length -eq 0){[System.Windows.Forms.MessageBox]::Show('Ya gotta select a Report, buddy!','Uh oh','OK','Error')}
elseif($count -eq $null -and $FullScriptCallLinked.Email_or_file -eq 'E'){$ResultText.text = ($nl),"Script Name = ",$FullScriptCallLinked.script_name,($nl),($nl),"Report Name = ",$FullScriptCallLinked.Report_name,($nl),($nl),"View Name = ",$FullScriptCallLinked.View_name,($nl),($nl),"Module = ",$FullScriptCallLinked.Module,($nl),($nl),"Email Address = ",$FullScriptCallLinked.email,($nl),($nl),"Email Subject = ",$FullScriptCallLinked.email_subject,($nl),($nl),"Email Body = ",$FullScriptCallLinked.email_message,($nl),($nl),"File Name = ",$FullScriptCallLinked.filename,($nl),($nl),"File Type = ",$FullScriptCallLinked.file_type}
elseif($count -eq $null -and $FullScriptCallLinked.Email_or_file -eq 'F'){$ResultText.text = ($nl),"Script Name = ",$FullScriptCallLinked.script_name,($nl),($nl),"Report Name = ",$FullScriptCallLinked.Report_name,($nl),($nl),"View Name = ",$FullScriptCallLinked.View_name,($nl),($nl),"Module = ",$FullScriptCallLinked.Module,($nl),($nl),"File Name = ",$FullScriptCallLinked.filename,($nl),($nl),"File Path = ",$FullScriptCallLinked.file_path,($nl),($nl),"Todays Date = ",$FullScriptCallLinked.today_date,($nl),($nl),$FullScriptCallLinked.yesterday_date,($nl),($nl),"File Type = ",$FullScriptCallLinked.file_type}
elseif($FullScriptCallLinked[0].Email_or_file -eq 'E'){$ResultText.text = ($nl),"Script Name = ",$FullScriptCallLinked[0].script_name,($nl),($nl),"Report Name = ",$FullScriptCallLinked[0].Report_name,($nl),($nl),"View Name = ",$FullScriptCallLinked[0].View_name,($nl),($nl),"Module = ",$FullScriptCallLinked[0].Module,($nl),($nl),"Email Address = ",$FullScriptCallLinked[0].email,($nl),($nl),"Email Subject = ",$FullScriptCallLinked[0].email_subject,($nl),($nl),"Email Body = ",$FullScriptCallLinked[0].email_message,($nl),($nl),"File Name = ",$FullScriptCallLinked[0].filename,($nl),($nl),"File Type = ",$FullScriptCallLinked[0].file_type}
elseif($FullScriptCallLinked[0].Email_or_file -eq 'F'){$ResultText.text = ($nl),"Script Name = ",$FullScriptCallLinked[0].script_name,($nl),($nl),"Report Name = ",$FullScriptCallLinked[0].Report_name,($nl),($nl),"View Name = ",$FullScriptCallLinked[0].View_name,($nl),($nl),"Module = ",$FullScriptCallLinked[0].Module,($nl),($nl),"File Name = ",$FullScriptCallLinked[0].filename,($nl),($nl),"File Path = ",$FullScriptCallLinked[0].file_path,($nl),($nl),"Todays Date = ",$FullScriptCallLinked[0].today_date,($nl),($nl),$FullScriptCallLinked[0].yesterday_date,($nl),($nl),"File Type = ",$FullScriptCallLinked[0].file_type}
})
$Nextbut.Add_Click({
#HERE IS WHERE I AM STUCK. MY INTENT IS TO SCROLL THROUGH EACH RESULT WHEN THE BUTTON IS CLICKED
function onClick {
foreach($i in $FullScriptCallLinked){
$ResultText.text = ($nl),"Script Name = ",$i.script_name,($nl),($nl),"Report Name = ",$i.Report_name,($nl),($nl),"View Name = ",$i.View_name,($nl),($nl),"Module = ",$i.Module,($nl),($nl),"Email Address = ",$i.email,($nl),($nl),"Email Subject = ",$i.email_subject,($nl),($nl),"Email Body = ",$i.email_message,($nl),($nl),"File Name = ",$i.filename,($nl),($nl),"File Type = ",$i.file_type
}
}
onClick
})
$RemoveScript.Add_Click({
#NOT COMPLETE
$deleteSQL = "DELETE FROM TABLE WHERE Script_Name = '$($FullScriptCallLinked.script_name)' and Report_Name = '$($FullScriptCallLinked.Report_name)' and View_Name = '$($FullScriptCallLinked.View_name)' and FILENAME = '$($FullScriptCallLinked.filename)' and File_type = '$($FullScriptCallLinked.file_type)'"
write-host $deleteSQL
#[environment]::exit(0)
})
$CancelBut.Add_Click({
#CLEARS ALL FIELDS IN THE FORM
$ScriptNameCombo.text=$null
$ReportNameCombo.items.clear()
$ReportNameCombo.resettext()
$ResultText.clear()
})
[void]$RemoveFile.ShowDialog()
Any help with this would be amazing! Thanks in advance