markus2016
Goto Top

Powershell - CheckedListBox mit DataSource, Checked Items entfernen

Hallo zusammen,

ich finde gerade keine Lösung.

Ich habe eine CheckedListBox.
Die Checked Items sollen aus der CheckedListBox entfernt werden.
Bei der Verwendung von ItemsAddRange funktioniert dies auch.

$Script:xxxBox = New-Object System.Windows.Forms.CheckedListBox
$Script:xxxBox.Items.AddRange($xxx)

ForEach ($_ in @($Script:xxxBox.CheckedItems)) { $Script:xxxBox.Items.Remove($_) }

Wenn ich aber die Daten über DataSource in die CheckListBox lade, funktioniert das leider nicht.

$Script:xxxBox.DataSource = $Script:xxx

Wie kann ich die Checked Items in diesem Fall aus der ChecklistBox löschen.

Gruß
Markus2016

Content-ID: 356657

Url: https://administrator.de/contentid/356657

Ausgedruckt am: 27.11.2024 um 13:11 Uhr

134464
134464 01.12.2017 aktualisiert um 09:33:05 Uhr
Goto Top
Wie kann ich die Checked Items in diesem Fall aus der ChecklistBox löschen
Indem du sie aus der Datenquelle löschst. Deine Datenquelle kennen wir nicht.

Ablauf wäre aber folgender: Listbox mit Sdhleife durchlaufen und checkeditems ausfiltern, dann erneute Achleufe über diese Elemente, diesmal aber dann die Datenquelle filtern nach einem Merkmal aus der Listbox und anschließendem Löschen aus der Datenquelle.
colinardo
Lösung colinardo 01.12.2017 aktualisiert um 12:32:48 Uhr
Goto Top
Servus Markus,
hier ein Beispiel mit einer DataTable als Datenquelle.
function GenerateForm {
#region Import the Assemblies
[reflection.assembly]::loadwithpartialname("System.Windows.Forms") | Out-Null  
[reflection.assembly]::loadwithpartialname("System.Drawing") | Out-Null  
#endregion

$form1 = New-Object System.Windows.Forms.Form
$btnDeleteItems = New-Object System.Windows.Forms.Button
$lb = New-Object System.Windows.Forms.CheckedListBox
$InitialFormWindowState = New-Object System.Windows.Forms.FormWindowState

# generate demo datasource
$global:datasource = New-Object System.Data.DataTable
$global:datasource.Columns.Add("Name")  
$global:datasource.Rows.Add("Max Muster")  
$global:datasource.Rows.Add("Anna Musterfrau")  
$global:datasource.Rows.Add("Herbert Dietrich")  
$global:datasource.Rows.Add("Franz Dichter")  

$handler_form1_Load= 
{
    # set datasource of listbox
    $lb.DataSource = $global:datasource
    # set display ad value member for listbox
    $lb.DisplayMember = "Name"  
    $lb.ValueMember = "Name"  
}

$handler_btnDeleteItems_Click= 
{
    # remove checked rows from datasource
     $lb.CheckedItems.Row | %{$global:datasource.Rows.Remove($_)}
    
}

$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 = 174
$System_Drawing_Size.Width = 292
$form1.ClientSize = $System_Drawing_Size
$form1.DataBindings.DefaultDataSourceUpdateMode = 0
$form1.Name = "form1"  
$form1.Text = "CheckedListBox item removal"  
$form1.add_Load($handler_form1_Load)

$btnDeleteItems.Anchor = 14

$btnDeleteItems.DataBindings.DefaultDataSourceUpdateMode = 0

$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 12
$System_Drawing_Point.Y = 142
$btnDeleteItems.Location = $System_Drawing_Point
$btnDeleteItems.Name = "btnDeleteItems"  
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 23
$System_Drawing_Size.Width = 268
$btnDeleteItems.Size = $System_Drawing_Size
$btnDeleteItems.TabIndex = 1
$btnDeleteItems.Text = "Delete checked items"  
$btnDeleteItems.UseVisualStyleBackColor = $True
$btnDeleteItems.add_Click($handler_btnDeleteItems_Click)

$form1.Controls.Add($btnDeleteItems)

$lb.Anchor = 15
$lb.DataBindings.DefaultDataSourceUpdateMode = 0
$lb.FormattingEnabled = $True
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 12
$System_Drawing_Point.Y = 12
$lb.Location = $System_Drawing_Point
$lb.Name = "lb"  
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 124
$System_Drawing_Size.Width = 268
$lb.Size = $System_Drawing_Size
$lb.TabIndex = 0

$form1.Controls.Add($lb)

#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
Grüße Uwe
Markus2016
Markus2016 01.12.2017 um 20:22:21 Uhr
Goto Top
Hallo Uwe,

vielen Dank für das Beispiel und die Hilfe.
Wie immer perfekt. face-smile

Gruß
Markus