WPF___DataGrid & CheckBox Event

2020. 2. 17. 11:17WPF/코드

DataGrid

 

*.xmal ___ Source Code

 

<DataGrid x:Name="DataGrid_Channel_Control_Bytes" AutoGenerateColumns="False" CanUserAddRows="False" CanUserDeleteRows="False">

                                            

    <DataGrid.Columns>

    

        <DataGridTextColumn Header="Name" Binding="{Binding Path=Name}"/>

        <DataGridTemplateColumn Header="Lane1">

            <DataGridTemplateColumn.CellTemplate>

                <DataTemplate>

                    <CheckBox Name="chkBox1" VerticalAlignment="Center" HorizontalAlignment="Center" Click="DataGrid_Channel_Control_Bytes_Click"/>

                </DataTemplate>

            </DataGridTemplateColumn.CellTemplate>

        </DataGridTemplateColumn>

        <DataGridTemplateColumn Header="Lane2">

            <DataGridTemplateColumn.CellTemplate>

                <DataTemplate>

                    <CheckBox Name="chkBox2" VerticalAlignment="Center" HorizontalAlignment="Center" Click="DataGrid_Channel_Control_Bytes_Click"/>

                </DataTemplate>

            </DataGridTemplateColumn.CellTemplate>

        </DataGridTemplateColumn>

        <DataGridTemplateColumn Header="Lane3">

            <DataGridTemplateColumn.CellTemplate>

                <DataTemplate>

                    <CheckBox Name="chkBox3" VerticalAlignment="Center" HorizontalAlignment="Center" Click="DataGrid_Channel_Control_Bytes_Click"/>

                </DataTemplate>

            </DataGridTemplateColumn.CellTemplate>

        </DataGridTemplateColumn>

        <DataGridTemplateColumn Header="Lane4">

            <DataGridTemplateColumn.CellTemplate>

                <DataTemplate>

                    <CheckBox Name="chkBox4" VerticalAlignment="Center" HorizontalAlignment="Center" Click="DataGrid_Channel_Control_Bytes_Click"/>

                </DataTemplate>

            </DataGridTemplateColumn.CellTemplate>

        </DataGridTemplateColumn>

        <DataGridTemplateColumn Header="Lane5">

            <DataGridTemplateColumn.CellTemplate>

                <DataTemplate>

                    <CheckBox Name="chkBox5" VerticalAlignment="Center" HorizontalAlignment="Center" Click="DataGrid_Channel_Control_Bytes_Click"/>

                </DataTemplate>

            </DataGridTemplateColumn.CellTemplate>

        </DataGridTemplateColumn>

        <DataGridTemplateColumn Header="Lane6">

            <DataGridTemplateColumn.CellTemplate>

                <DataTemplate>

                    <CheckBox Name="chkBox6" VerticalAlignment="Center" HorizontalAlignment="Center" Click="DataGrid_Channel_Control_Bytes_Click"/>

                </DataTemplate>

            </DataGridTemplateColumn.CellTemplate>

        </DataGridTemplateColumn>

        <DataGridTemplateColumn Header="Lane7">

            <DataGridTemplateColumn.CellTemplate>

                <DataTemplate>

                    <CheckBox Name="chkBox7" VerticalAlignment="Center" HorizontalAlignment="Center" Click="DataGrid_Channel_Control_Bytes_Click"/>

                </DataTemplate>

            </DataGridTemplateColumn.CellTemplate>

        </DataGridTemplateColumn>

        <DataGridTemplateColumn Header="Lane8">

            <DataGridTemplateColumn.CellTemplate>

                <DataTemplate>

                    <CheckBox Name="chkBox8" VerticalAlignment="Center" HorizontalAlignment="Center" Click="DataGrid_Channel_Control_Bytes_Click"/>

                </DataTemplate>

            </DataGridTemplateColumn.CellTemplate>

        </DataGridTemplateColumn>

    </DataGrid.Columns>

                                            

</DataGrid>

WPF ___ Source Code

 

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Media;

using System.Collections.ObjectModel;

using System.ComponentModel;

using System.Windows.Controls;

using System.Windows;

using System.Data;

namespace qsfp_gui

{

    class ChannelControlBytes

    {        

        private const byte C_MAX_LANE = 8 ;

        public bool[,] CheckBoxIsChecked

        {

            get { return __CheckBoxIsChecked; }

            set { __CheckBoxIsChecked = value; }

        }

        private bool[,] __CheckBoxIsChecked;

 

 

        public string[] strColumn_0_Name = new string[] {

            "TX DIS",

            "TX SQUELCH DIS",

            "RX SQUELCH DIS",

            "RX DIS",

            "RX RS MSB",

            "RX RS LSB",

            "TX RX MSB",

            "TX RX LSB",

            "TX CDR Control",

            "RX CDR Control"

        };

 

       

        public ChannelControlBytes()

        {

            __CheckBoxIsChecked = new bool[strColumn_0_Name.Length, C_MAX_LANE];

        }

 

        private ObservableCollection<UserData> __userInfo = new ObservableCollection<UserData>();

 

        public void DataGrid___Init(DataGrid dg)

        {

            foreach (string rBuf in strColumn_0_Name)

            {

                __userInfo.Add(new UserData() { Name = rBuf });

            }

            dg.ItemsSource = __userInfo;

        }

 

        private void DataGrid_Channel_Control_Bytes_Click(object sender, RoutedEventArgs e)

        {

            string iName = null;

            int numColumn = 0, numRow = 0;

            for (Visual vis = sender as Visual; vis != null; vis = VisualTreeHelper.GetParent(vis) as Visual)

            {

                if (vis is DataGridRow)

                {

                    /** Colunm[0] = Text */

                    iName = ((UserData)((DataGridRow)vis).Item).Name;

                    /** CheckBox x:Name */

                    string strCheckBoxName = ((CheckBox)sender).Name;

                    numColumn = Convert.ToByte(strCheckBoxName.Substring(strCheckBoxName.Length-11));

                    

                    break;

                }               

            }

            numColumn = numColumn - 1;

            for ( int i = 0; i < CCB.strColumn_0_Name.Length; i++)

            {

                if (iName == CCB.strColumn_0_Name[i])

                {

                    numRow = i;

                    break;

                }                

            }

            if (((CheckBox)sender).IsChecked == true)

            {        

                CCB.CheckBoxIsChecked[numRow, numColumn] = true;                

            }

            else

            {             

                CCB.CheckBoxIsChecked[numRow, numColumn] = false;                

            }

        }

    }

    public class UserData : INotifyPropertyChanged

    {

        private string __Name;

        public string Name

        {

            get { return __Name; }

            set

            {

                __Name = value;

                OnPropertyChanged("Name");

            }

        }

        private void OnPropertyChanged(string propertyName)

        {

            if (PropertyChanged != null)

            {

                PropertyChanged(thisnew PropertyChangedEventArgs(propertyName));

            }

        }

        public event PropertyChangedEventHandler PropertyChanged;

        

    }

}

 

 

실행

 

 

'WPF > 코드' 카테고리의 다른 글

WPF___TextBoxCopyPaste 처리  (0) 2021.01.19
WPF___TextBox DragDrop 처리  (0) 2021.01.19
WPF___DataGrid  (0) 2020.02.17
WPF___닫힌 윈도우폼 열면 에러?  (0) 2020.02.17
WPF___백그라운드 프로세서 종료  (0) 2020.02.17