Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Question
Thursday, November 5, 2015 12:37 PM | 1 vote
I have made this powershell code below, wich adds 2 rows to a datagridview. I do this with the statement:
$DataGridView_ServerName.Rows.Add("1", "2")
But I would like to use the column names while adding the data. so that I can move (position) my columns more easily in my datagridview:
$DataGridView_ServerName.Rows.Add($Column1="1", $Column2="2")
or
$DataGridView_ServerName.Rows.Add(ServerName="1", Description="2")
Is this possible?
Complete code:
#Define Form
$form1 = New-Object System.Windows.Forms.Form
$form1.Text = ""
$form1.Name = "form1"
$form1.DataBindings.DefaultDataSourceUpdateMode = 0
$form1.Location = New-Object System.Drawing.Point(10,10)
$form1.Size = New-Object System.Drawing.Size(1600,900)
$form1.WindowState = "Normal"
$form1.StartPosition = "CenterScreen"
#Definine DataGridView
$DataGridView_ServerName = New-Object System.Windows.Forms.DataGridView
$DataGridView_ServerName.AllowUserToAddRows = $false
$DataGridView_ServerName.AllowUserToDeleteRows = $false
$DataGridView_ServerName.Top = 10
$DataGridView_ServerName.Left = 10
$DataGridView_ServerName.Height = 100
$DataGridView_ServerName.Width = 210
$DataGridView_ServerName.ColumnHeadersVisible = $true
$DataGridView_ServerName.ColumnHeadersHeight = 20
$DataGridView_ServerName.Enabled = $false
#Add Columns
$Column1 = New-Object System.Windows.Forms.DataGridViewTextboxColumn
$Column2 = New-Object System.Windows.Forms.DataGridViewTextboxColumn
$Column1.Width = 80
$Column2.Width = 80
$Column1.Name = 'ServerName'
$Column2.Name = 'Description'
$DataGridView_ServerName.Columns.Add($Column1)
$DataGridView_ServerName.Columns.Add($Column2)
$form1.Controls.AddRange(($DataGridView_ServerName))
#Add Rows
$DataGridView_ServerName.Rows.Add("1", "2")
$DataGridView_ServerName.Rows.Add("a", "b")
$form1.ShowDialog()
All replies (6)
Thursday, November 5, 2015 1:05 PM ✅Answered | 1 vote
Hi Marco,
you can use a utility function to do this:
function Add-Server
{
Param (
$ServerName = "",
$Description = ""
)
$DataGridView_ServerName.Rows.Add($ServerName, $Description)
}
#Define Form
$form1 = New-Object System.Windows.Forms.Form
$form1.Text = ""
$form1.Name = "form1"
$form1.DataBindings.DefaultDataSourceUpdateMode = 0
$form1.Location = New-Object System.Drawing.Point(10, 10)
$form1.Size = New-Object System.Drawing.Size(1600, 900)
$form1.WindowState = "Normal"
$form1.StartPosition = "CenterScreen"
#Definine DataGridView
$DataGridView_ServerName = New-Object System.Windows.Forms.DataGridView
$DataGridView_ServerName.AllowUserToAddRows = $false
$DataGridView_ServerName.AllowUserToDeleteRows = $false
$DataGridView_ServerName.Top = 10
$DataGridView_ServerName.Left = 10
$DataGridView_ServerName.Height = 100
$DataGridView_ServerName.Width = 210
$DataGridView_ServerName.ColumnHeadersVisible = $true
$DataGridView_ServerName.ColumnHeadersHeight = 20
$DataGridView_ServerName.Enabled = $false
#Add Columns
$Column1 = New-Object System.Windows.Forms.DataGridViewTextboxColumn
$Column2 = New-Object System.Windows.Forms.DataGridViewTextboxColumn
$Column1.Width = 80
$Column2.Width = 80
$Column1.Name = 'ServerName'
$Column2.Name = 'Description'
$DataGridView_ServerName.Columns.Add($Column1)
$DataGridView_ServerName.Columns.Add($Column2)
$form1.Controls.AddRange(($DataGridView_ServerName))
#Add Rows
Add-Server "1" "2"
Add-Server "a" "b"
$parsplat = @{ ServerName = "Name"; Description = "Desc" }
Add-Server @parsplat
$form1.ShowDialog()
Cheers,
Fred
Please note, that this requires either passing the GridView as an additional parameter, or - as in this example - custom designing the function for a single use where you know the variable name of the gridview.
There's no place like 127.0.0.1
Thursday, November 5, 2015 2:21 PM
Fred,
Thanks a lot, I see I can also use it as:
Add-Server -Description "Desc2" -ServerName "Name2"
Is there also a method to retrieve the data from a DataGridView by column name? Now I do it like this:
#objTextBox
$objTextBox = New-Object System.Windows.Forms.TextBox
$objTextBox.Location = New-Object System.Drawing.Point(10,120)
$objTextBox.Size = New-Object System.Drawing.Size(130,20)
$form1.Controls.Add($objTextBox)
$objTextBox.Text = $DataGridView_ServerName.Rows[1].Cells[1].Value.ToString()
But I would like to use something like this:
$objTextBox.Text = $DataGridView_ServerName.Rows[1].Cells[Description].Value.ToString()
Thanks,
Marco
Thursday, November 5, 2015 2:43 PM | 1 vote
I found it by myself
$objTextBox.Text = $DataGridView_ServerName.Item("Description",1).Value
Marco
Thursday, November 5, 2015 3:48 PM
If we use a datatable all things become much easier including sorting.
#Define Form
$form1 = New-Object System.Windows.Forms.Form
$form1.Text = ""
$form1.Name = "form1"
$form1.Location = '10, 10'
$form1.Size = '600, 400'
$form1.StartPosition = 'CenterScreen'
$buttonAdd = New-Object System.Windows.Forms.Button
$form1.Controls.Add($buttonAdd)
$buttonAdd.Text = 'Add Row'
$buttonAdd.Location = '430,10'
$buttonAdd.add_Click({ AddRow 'ServerName' 'Added by buttoon' })
# Define DataGridView
$dgvServer = New-Object System.Windows.Forms.DataGridView
$form1.Controls.Add($dgvServer)
$dgvServer.ReadOnly = $true
$dgvServer.Location = '10,10'
$dgvServer.Size = '400,350'
# add a data table
$dt = New-Object System.Data.DataTable
$dgvServer.DataSource = $dt
[void]$dt.Columns.Add('ServerName')
[void]$dt.Columns.Add('Description')
#Add Rows
function AddRow($Server, $Description) {
$row = $dgvServer.DataSource.NewRow()
$row['ServerName'] = $Server
$row['Description'] = $Description
$dgvServer.DataSource.Rows.Add($row)
}
AddRow 'MyServer1' 'My new server'
AddRow 'MyServer2' 'My new server'
AddRow 'MyServer3' 'My new server'
AddRow 'MyServer4' 'My new server'
$form1.ShowDialog()
# get a table roow and clumn
$dt[0].ServerName
# enumnerate
$dt | %{ $_.ServerName }
# Export
$dt | Export-Csv file.csv
\(ツ)_/
Thursday, November 5, 2015 3:54 PM
Sorry - had to fix the code paste as it was pasted twice.
\(ツ)_/
Saturday, June 23, 2018 2:52 AM
Is there a way to change column width? I added the below in your code above but nothing changed. Thanks
$dgvServer.AutoSize = $true