DataGridView Spalten sortierbar machen
Moin!
In einer von mir betreuten (aber nicht entwickelten) Anwendung wird die Variable $dbResult mittels invoke-sqlcmd gefüllt. Das ist dann wohl eine DataRowCollection? (screenshot1)
Dann wird sie dem User zur Ansicht und Auswahl dargeboten:
$oDummy = $dbResult | Out-GridViewCustom -Title $eStep.Info
Out-GridViewCustom ist eine Funktion, die ein Fenster mit Buttons, Kontextmenü usw aufbaut. Hier ist der (gekürzte) Code:
Mein Problem ist, dass die Spalten nicht für den Anwender sortierbar waren. Ich habe also den mit #----- mein Versuch --- eingerahmten Block eingefügt und dabei auch etliche Varianten versucht, so statt der 1 auch mit DataGridViewColumnSortMode.Automatic u.ä.
Aber das eigentliche Problem scheint zu sein, dass in der Schleife die einzelnen Spalten gar nicht durchgegangen werden. Und es gibt in $dgv überhaupt keine Spalten (screenshot2), und dennoch sieht der Anwender eine gefüllte Tabelle... Ich verstehe die Welt nicht mehr.
Hat jemand Ideen, was da los ist und wie ich die Spalten sortierbar bekomme?
Herzliche Grüße, Olaf
In einer von mir betreuten (aber nicht entwickelten) Anwendung wird die Variable $dbResult mittels invoke-sqlcmd gefüllt. Das ist dann wohl eine DataRowCollection? (screenshot1)
Dann wird sie dem User zur Ansicht und Auswahl dargeboten:
$oDummy = $dbResult | Out-GridViewCustom -Title $eStep.Info
Out-GridViewCustom ist eine Funktion, die ein Fenster mit Buttons, Kontextmenü usw aufbaut. Hier ist der (gekürzte) Code:
$formMain = New-Object System.Windows.Forms.Form
$btnOK = New-Object System.Windows.Forms.Button
$dgv = New-Object System.Windows.Forms.DataGridView
$InitialFormWindowState = New-Object System.Windows.Forms.FormWindowState
#----------------------------------------------
# Event Script Blocks
#----------------------------------------------
$handler_btnOK_Click={
if ($dgv.SelectedRows.Count -gt 0){
$script:selectedData = $dgv.SelectedRows.DataBoundItem
}
$formMain.Close()
}
$handler_formMain_Load={
if($title){ $formMain.Text = $title }
if ($all.Count -eq 0){
$btnHiddenColumns.Enabled = $false
return
}
$arrList = New-Object System.Collections.ArrayList
$arrList.AddRange(@($all))
$dgv.DataSource = $arrList
}
$OnLoadForm_StateCorrection={#Correct the initial state of the form to prevent the .Net maximized form issue
$formMain.WindowState = $InitialFormWindowState
}
#----------------------------------------------
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 452
$System_Drawing_Size.Width = 632
$formMain.ClientSize = $System_Drawing_Size
$formMain.DataBindings.DefaultDataSourceUpdateMode = 0
$formMain.Name = "formMain"
$formMain.Text = "DataGrid"
$formMain.StartPosition="CenterScreen"
$formMain.TopMost=$true
$formMain.add_Load($handler_formMain_Load)
$btnOK.Anchor = 10
$btnOK.DataBindings.DefaultDataSourceUpdateMode = 0
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 545
$System_Drawing_Point.Y = 417
$btnOK.Location = $System_Drawing_Point
$btnOK.Name = "btnOK"
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 23
$System_Drawing_Size.Width = 75
$btnOK.Size = $System_Drawing_Size
$btnOK.TabIndex = 1
$btnOK.Text = "OK"
$btnOK.UseVisualStyleBackColor = $True
$btnOK.add_Click($handler_btnOK_Click)
$formMain.Controls.Add($btnOK)
$dgv.Anchor = 15
$dgv.DataBindings.DefaultDataSourceUpdateMode = 0
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 12
$System_Drawing_Point.Y = 12
$dgv.Location = $System_Drawing_Point
$dgv.Name = "dgv"
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 399
$System_Drawing_Size.Width = 608
$dgv.Size = $System_Drawing_Size
$dgv.TabIndex = 0
$dgv.SelectionMode = 1
$dgv.MultiSelect = $OutputMode -eq "Multiple"
$dgv.AllowUserToAddRows = $false
$dgv.AllowUserToResizeRows = $false
$dgv.AllowUserToDeleteRows = $false
$dgv.AllowUserToOrderColumns = $true
$dgv.AllowUserToResizeColumns = $true
#$dgv.AutoSizeColumnsMode = 'AllCellsExceptHeader';
$dgv.ReadOnly = $true
#----- mein Versuch -----------------------------------------
foreach($column in $dgv.Columns){
$column.SortMode = 1;
}
#----- mein Versuch Ende-----------------------------------------
$formMain.Controls.Add($dgv)
#Save the initial state of the form
$InitialFormWindowState = $formMain.WindowState
#Init the OnLoad event to correct the initial state of the form
$formMain.add_Load($OnLoadForm_StateCorrection)
#Show the Form
$formMain.ShowDialog()| Out-Null
# return selected data
return $script:selectedData
Mein Problem ist, dass die Spalten nicht für den Anwender sortierbar waren. Ich habe also den mit #----- mein Versuch --- eingerahmten Block eingefügt und dabei auch etliche Varianten versucht, so statt der 1 auch mit DataGridViewColumnSortMode.Automatic u.ä.
Aber das eigentliche Problem scheint zu sein, dass in der Schleife die einzelnen Spalten gar nicht durchgegangen werden. Und es gibt in $dgv überhaupt keine Spalten (screenshot2), und dennoch sieht der Anwender eine gefüllte Tabelle... Ich verstehe die Welt nicht mehr.
Hat jemand Ideen, was da los ist und wie ich die Spalten sortierbar bekomme?
Herzliche Grüße, Olaf
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 671787
Url: https://administrator.de/forum/datagridview-spalten-sortierbar-machen-671787.html
Ausgedruckt am: 06.03.2025 um 22:03 Uhr