Click here to Skip to main content
15,915,864 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
Here, I have problem in single checkbox selection. When I select using checkbox first row only working perfect, But when I select using checkbox other row single. I can't get the checkbox value true. It gives me false. And My multiple selection working perfect. Please help me out in this problem. Thanks in advance.


Datagrid code is below :-
<datagrid x:name="dgDataArea" grid.row="2" autogeneratecolumns="False" selectionmode="Extended" selectionchanged="dgDataArea_SelectionChanged">
               <datagrid.columns>
                   <datagridtemplatecolumn x:name="chkCol">
                       <datagridtemplatecolumn.celltemplate>
                           <datatemplate>
                               <checkbox ischecked="{Binding CheckAll,UpdateSourceTrigger=PropertyChanged}" checked="InnerCheckBox_Checked" unchecked="InnerCheckBox_UnChecked" />
                           </datatemplate>
                       </datagridtemplatecolumn.celltemplate>
                   </datagridtemplatecolumn>

                   <datagridtextcolumn header="Cheque Id" binding="{Binding Bank_ID,Mode=OneWay}" visibility="Hidden" />

                   <datagridtextcolumn header="ChequeNo" binding="{Binding ChequeNo,Mode=OneWay}" />

                   <datagridtextcolumn header="Remark" binding="{Binding Remark,Mode=OneWay}" />
               </datagrid.columns>
           </datagrid>

       <checkbox x:name="chkSelectAll" grid.row="2" content="Select All" checked="chkSelectAll_Checked" unchecked="chkSelectAll_Unchecked"  />


Codebehind Side Checkbox logic is below:-
C#
public bool SingleRecordUnselected = false;

        public bool isAllDataSelected()
        {
            return (dgDataArea.ItemsSource as List<bankmaster>).Where(t => !t.CheckAll).Select(t => t.Bank_ID).ToList().Count > 0 ? false : true;
        }

        private void InnerCheckBox_Checked(object sender, RoutedEventArgs e)
        {
            if (!chkSelectAll.IsChecked.Value)
                chkSelectAll.IsChecked = isAllDataSelected();
        }

        private void InnerCheckBox_UnChecked(object sender, RoutedEventArgs e)
        {
            if (chkSelectAll.IsChecked.Value)
            {
                SingleRecordUnselected = true;
                chkSelectAll.IsChecked = false;
            }
        }

        private void chkSelectAll_Checked(object sender, RoutedEventArgs e)
        {
            List<bankmaster> bmlist = dgDataArea.ItemsSource as List<bankmaster>;
            if (bmlist != null)
            {
                foreach (var item in bmlist)
                {
                    item.CheckAll = true;
                }
                dgDataArea.Items.Refresh();
            }
        }

        private void chkSelectAll_Unchecked(object sender, RoutedEventArgs e)
        {
            if (!SingleRecordUnselected)
            {
                List<bankmaster> bmlist = dgDataArea.ItemsSource as List<bankmaster>;
                if (bmlist != null)
                {
                    foreach (var item in bmlist)
                    {
                        item.CheckAll = false;
                    }
                    dgDataArea.Items.Refresh();
                }
            }
            else
            {
                SingleRecordUnselected = true;
            }
        }
Posted
Updated 6-Nov-15 20:28pm
v3

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