Author Posts

April 12, 2016 at 1:38 pm

Hello,

I'm trying to create a form with XAML. The problem i'm facing is that i cant retrieve the value's from a datagrid. What i want is to loop true al the checked checkboxes.

The code is use is:

XAML:
(Replaced the open and closed tags for { and }. Otherwise site didn't show the code)

 {Window 
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        x:Name="Window_GuiManagement" Title="Remove Company User" WindowStartupLocation = "CenterScreen" 
        Width = "587.307" Height = "540.023" Visibility="Visible" WindowStyle="ToolWindow" ResizeMode="NoResize" Topmost="True"}
    {Grid ToolTip="Managed IT"}
        {Label x:Name="lblCompany" Content="Company:" HorizontalAlignment="Left" Margin="11,10,0,0" Height="26" VerticalAlignment="Top"/}
        {ComboBox x:Name="cbCompanys" Margin="10,36,10,0" VerticalAlignment="Top"/}
        {Label x:Name="lbluser" Content="User:" HorizontalAlignment="Left" Margin="11,63,0,0" VerticalAlignment="Top"/}
        {CheckBox x:Name="chkbMultiSelect" Content="MultiSelect" Margin="481,69,10,0" VerticalAlignment="Top" Width="90"/}
        {DataGrid x:Name="dgUsers" Margin="11,94,10,0" VerticalAlignment="Top" Height="299" SelectionMode="Single" AlternationCount="1"}
            {DataGrid.Columns}
                {DataGridCheckBoxColumn Binding="{x:Null}" ClipboardContentBinding="{x:Null}" CanUserSort="False" CanUserResize="False" IsReadOnly="False"/}
                {/DataGrid.Columns}
        {/DataGrid}
        {CheckBox x:Name="chkbBackupFiles" Content="Backup Files" HorizontalAlignment="Left" Margin="11,398,0,0" VerticalAlignment="Top" IsChecked="True"/}
        {CheckBox x:Name="chkbmail" Content="Backup Mail" HorizontalAlignment="Left" Margin="11,418,0,0" VerticalAlignment="Top" IsChecked="True"/}
        {CheckBox x:Name="chkblocation" Content="Open backup location" HorizontalAlignment="Left" Margin="11,438,0,0" VerticalAlignment="Top" IsChecked="True"/}
        {Button x:Name="btnSend" Content="Send" Margin="491,469,10,0" VerticalAlignment="Top"/}
        {CheckBox x:Name="chkblocation_Copy" Content="Open backup location" HorizontalAlignment="Left" Margin="11,438,0,0" VerticalAlignment="Top" IsChecked="True"/}
    {/Grid}
{/Window}

Powershell:



function Remove-GuiCompanyUser {

    begin {
        #Xaml Path
        [xml]$xaml = Get-Content "$Global:relPathXaml\RemoveCompanyUser.xaml"
        $reader=(New-Object System.Xml.XmlNodeReader $xaml) 
        # Try to read the XAML to form
        try { 
            $Form=[Windows.Markup.XamlReader]::Load( $reader )
        } catch {
            Write-Host "Something went wrong..."
        }

        #Setting al the fields to varialbe
        $cbCompanys = $Form.FindName("cbCompanys")
        $chkbMultiSelect = $Form.FindName("chkbMultiSelect")
        $dgUsers = $Form.FindName("dgUsers")
        $chkbBackupFiles = $Form.FindName("chkbBackupFiles")
        $chkbBackupMail = $Form.FindName("chkbBackupMail")
        $chkblocation = $Form.FindName("chkblocation")
        $btnSend = $Form.FindName("btnSend")
    }
    
    process {
      
        # Form setup
        $Form.Background = $Global:BackColor

        # for now disable the multiselect button
        $chkbMultiSelect.IsEnabled = $false

        # Add scripts to Company Combobox    
        foreach ($Company in ($Global:Companys | sort Name)) {
            [void] $cbCompanys.Items.Add($Company.Name)
        }

        # Add on checked to CheckBox Multiselect
        $chkbMultiSelect.Add_Checked({
            $dgUsers.SelectionMode = "Extended"
        })

        # Add on UnChecked to CheckBox Multiselect
        $chkbMultiSelect.Add_UnChecked({
            $dgUsers.SelectionMode = "Single"
        })

        # Add onchange to Company Combobox
        $cbCompanys_Add_SelectionChanged = {
            # Disable User Combobox
            $cbCompanys.IsEnabled = $False

            # Clear the Users Combobox
            $dgUsers.Clear()

            # Get all users of company
            $CompUsers = Get-CompanyUser -Company $cbCompanys.SelectedItem | select DisplayName, UserPrincipalName, SamAccountName | sort DisplayName

            # Add users to DataGrid
            $dgUsers.ItemsSource = $CompUsers

            # Allow sorting on all columns
            $dgUsers.Columns | ForEach-Object { 
                $_.CanUserSort = $True
                $_.IsReadOnly = $True
            }

            # Set Columns ReadOnly of not
            $dgUsers.Columns[0].IsReadOnly = $False

            # Enable User Combobox
            $cbCompanys.IsEnabled = $True
        }

        # Add selectionchanged function to Combobox
        $cbCompanys.Add_SelectionChanged($cbCompanys_Add_SelectionChanged)

        # Set action to button
        $btnSend.Add_Click({
            # Get selected items
            $SelCompany = $cbCompanys.SelectedItem

            # Checking if all fiels contain value
            if (!($SelCompany)) { 
                EmptyFormField -Field "Company" 
            } else { 
                for($i=0;$i -lt $dgUsers.items.count;$i++){
                    
                   if($dgUsers.Rows[$i].Cells[0].Value -eq $true)
                   {
                     write-host "cell #$i is checked"
                   }
                }

            }
            
        })

        # Start form
        $Form.ShowDialog() | out-null

    }
    
    end {
    }

}

After some googleing i found out you can call the rows by $dgUsers.Rows but that value doesn't exist. $dgUsers.Columns does exist.. I can call al my value's with $dgUsers.Items. But that only gives the array back I put in to it. So i don't have the checkboxes..

Anyone an idea?

Greetings,
Jos Vink