Click here to Skip to main content
11,712,727 members (78,823 online)
Rate this: bad
good
Please Sign up or sign in to vote.
See more: C# WPF
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'.


<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>

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 29-Jun-13 5:19am

1 solution

Rate this: bad
good
Please Sign up or sign in to vote.

Solution 1

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
    }
}
  Permalink  
v2

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

  Print Answers RSS
0 CHill60 335
1 Sergey Alexandrovich Kryukov 300
2 OriginalGriff 230
3 Andy Lanng 160
4 Maciej Los 130
0 CHill60 335
1 Sergey Alexandrovich Kryukov 300
2 OriginalGriff 230
3 Andy Lanng 160
4 Maciej Los 130


Advertise | Privacy | Mobile
Web03 | 2.8.150819.1 | Last Updated 29 Jun 2013
Copyright © CodeProject, 1999-2015
All Rights Reserved. Terms of Service
Layout: fixed | fluid

CodeProject, 503-250 Ferrand Drive Toronto Ontario, M3C 3G8 Canada +1 416-849-8900 x 100