Click here to Skip to main content
16,015,274 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
I have listbox with checked box as following, & it binding its data from sql server database,
, I want to get selected items value When I run this but I got this error

Unable to cast object of type 'System.Data.DataRowView' to type 'System.Windows.Controls.CheckBox'.


C#
<Window.Resources>
        <DataTemplate x:Key="NameColumnTemplate">
            <CheckBox Height="20"  FontFamily="Arial" FontSize="14"  Content="{Binding Path=PermissionDescription}" 
                      Tag="{Binding PermissionID}" HorizontalAlignment="Stretch" VerticalAlignment="Center"
                      />
        </DataTemplate>
    </Window.Resources>
<Grid>
<ListBox HorizontalAlignment="Stretch" Margin="12,12,136,21" Name="lstEmployees" 
                          VerticalAlignment="Stretch" ItemsSource="{Binding Tables[0]}"  
                          ItemTemplate="{StaticResource NameColumnTemplate}" 
                          ScrollViewer.VerticalScrollBarVisibility="Auto" removed="{x:Null}" 
                         BorderBrush="#FFAD7F30"  
                 SelectionChanged="lst_SelectionChanged" CheckBox.Click="lst_SelectionChanged"/>
<Button Content="listbox" Height="23" HorizontalAlignment="Left" Margin="214,207,0,0" Name="btnShowSelectedItems" 
                VerticalAlignment="Top" Width="75" Click="btnShowSelectedItems_Click" />
</Grid>


C#
public Window2()
       {
           InitializeComponent();
           // bind data
           lstEmployees.DataContext = SelJobsCat();
       }

private void btnShowSelectedItems_Click(object sender, RoutedEventArgs e)
       {
           foreach (CheckBox item in lstEmployees.Items)
           {
               if (item.IsChecked == true)
               {
                   System.Windows.MessageBox.Show((item.Content + " is checked."));

               }
           }
       }

       private void lst_SelectionChanged(object sender, RoutedEventArgs e)
       {
           if (e.OriginalSource is CheckBox)
           {
               lstEmployees.SelectedItem = e.OriginalSource;
           }

           if (lstEmployees.SelectedItem == null) return;
           Console.WriteLine(lstEmployees.SelectedIndex);
           Console.WriteLine(((CheckBox)lstEmployees.SelectedItem).IsChecked);
       }


where is my error please, Thanks
Posted

1 solution

Use the CheckBoxList's GetItemChecked or GetItemCheckState method

for (int i = 0; i < lstEmployees.Items.Count; i++)
  if (clbIncludes.GetItemChecked(i))
    System.Windows.MessageBox.Show((item.Content + " is checked."));
  else
    // Do unselected stuff

or if you want to only include actually checked items:

if (stEmployees.GetItemCheckState(i) == CheckState.Checked)

or listitem.selected:

foreach (ListItem listItem in lstEmployees.Items)
{
    if (listItem.Selected) {
        //do some work
    }
    else {
        //do some work
    }
}
 
Share this answer
 
v2

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900