본문 바로가기
C#

C# WPF Datagrid 내 전체 Checkbox 선택, 해제하기

by orange+ 2024. 7. 4.

안녕하세요.

오늘은 Datagrid 내 전체 Checkbox 선택, 해제하기 에 대해 알아 보겠습니다.

 

우리는 보통 Datagrid 내 다수의 Row를  선택하기 위해 각 Row 별로 Checkbox를 두어 해당 Row를 선택하는

경우가 종종 있습니다.

 

물론 Checkbox 전체 선택, 해제 하기는 개발 툴에 따라 구현하기가 아주 쉬울 수도 있습니다. 

하지만 C#의 경우 초보자들이 따라 하기에 약간은 힘든 내용이 될 수도 있을 것 같아 제 나름의 Simple한

방법을 정리했으니 해당 기능 구현이 필요한 분들에게 좋은 참조가 되었으면 합니다.

 

자, 그럼 시작해 볼까요?

 

1. 먼저 위 기능을 구현하기 위해서 이전에 작성한

C# WPF Datagrid Cell 가져오기 를 보시고 해당 내용을 이해한 후 아래 내용을 보시면 좋겠습니다.

 

 

2. Datagrid Cell 가져오기 내용을 이해하셨다면,

xaml 파일 내 Datagrid Checkbox를 아래와 같이 정의하여 주십시오.

 

<DataGrid x:Name="Datagrid명" 

            ......>

            <DataGrid.Columns>

                            <DataGridCheckBoxColumn Binding="{Binding chk, UpdateSourceTrigger=PropertyChanged}" x:Name="tblchk" CanUserResize="False" Width="auto">
                                <DataGridCheckBoxColumn.Header>
                                    <CheckBox Name="chkSelectAll" Checked="chkSelectAll_Checked" Unchecked="chkSelectAll_Unchecked"></CheckBox>
                                </DataGridCheckBoxColumn.Header>
                            </DataGridCheckBoxColumn>

......

 

3. 그리고 실제 Checkbox 헤더를 클릭해 전체 Checkbox를 선택, 해제 하는 부분에 아래와 같이 작성해 주시면 됩니다.

(아래 내용 중 CommonStaticMethodDatagrid Cell 가져오기에 필요한 함수가 정의된 클래스 입니다. )

 

        private void chkSelectAll_Checked(object sender, RoutedEventArgs e)
        {
            foreach (DataGridRow row in CommonStaticMethod.GetDataGridRows(Datagrid명))
            {
                if (row != null)
                {
                    DataGridCell cell = CommonStaticMethod.GetdgCell( Datagrid명, row, 1);
                    CheckBox ckb = cell.Content as CheckBox;
                    if (ckb.IsChecked == false) 
                    {
                        ckb.IsChecked = true;
                    }
                }
            }
        }

        private void chkSelectAll_Unchecked(object sender, RoutedEventArgs e)
        {            
            foreach (DataGridRow row in CommonStaticMethod.GetDataGridRows(Datagrid명 ))
            {
                if (row != null)
                {
                    DataGridCell cell = CommonStaticMethod.GetdgCell(Datagrid명, row, 15);
                    CheckBox ckb = cell.Content as CheckBox;
                    if (ckb.IsChecked == true) 
                    {
                        ckb.IsChecked = false;
                    }
                }
            }
        }

 

 

어떠세요? 내용이 도움이 되셨나요? 

어떻게 보면 복잡하게 느껴질 수도 있는데 천천히 살펴 보시면 어려운 내용은 없습니다.

그러니 잘 활용해 보세요.

 

 

그럼, 여러분 모두 언제나 행복하길 기원하겠습니다. 

감사합니다. ^^*

 

 

 

 

그런데 혹시 가슴이 답답해 명상이나 힐링이 필요하시다면?

아래로 들러 주세요~ ^^

 

https://youtu.be/oRHsThgQdzk?feature=shared

 

 

댓글