C# WPF DataGrid使用,包括隔行多选

C# WPF DataGrid使用,包括隔行多选

xaml

                <ScrollViewer VerticalAlignment="Stretch" x:Name="scrollviewer" VerticalScrollBarVisibility="Hidden" HorizontalScrollBarVisibility="Disabled" TouchDown="ScrollViewer_TouchDown" TouchMove="ScrollViewer_TouchMove" TouchUp="ScrollViewer_TouchUp">
                <!--<DataGrid CanUserDeleteRows="False" CanUserAddRows="False" IsReadOnly="True" SelectionUnit="FullRow"  Name="datagrid" HorizontalAlignment="Stretch" HorizontalContentAlignment="Center" VerticalAlignment="Top" AutoGenerateColumns="True" Background="{x:Null}" BorderBrush="{x:Null}">-->
                <DataGrid 
                  AutoGenerateColumns="True" IsReadOnly="True"                 
                  Name="dataGrid"  Background="White" 
                  GridLinesVisibility="All" Margin="5" 
                  HorizontalAlignment="Center" CanUserAddRows="False"
                      HeadersVisibility="Column"  AlternationCount="2" BorderThickness="1" FontSize="22" SelectedCellsChanged="DataGrid_SelectedCellsChanged" Focusable="False">
                    <DataGrid.Columns>
                        <DataGridCheckBoxColumn x:Name="check_col" Width="50">
                        </DataGridCheckBoxColumn>
                        
                    </DataGrid.Columns>
                    <DataGrid.ColumnHeaderStyle>
                        <Style TargetType="DataGridColumnHeader">
                            <Setter Property="Background" Value="White"></Setter>
                            <Setter Property="BorderThickness" Value="1" />
                            <Setter Property="FontSize" Value="22" />
                            <Setter Property="Width" Value="300" />
                        </Style>
                    </DataGrid.ColumnHeaderStyle>
                    <DataGrid.RowStyle>
                        <Style TargetType="DataGridRow">
                            <Setter Property="Background" Value="White" />
                            <Setter Property="BorderThickness" Value="1" />
                            <Setter Property="FontSize" Value="22" />
                        </Style>
                    </DataGrid.RowStyle>
                </DataGrid>
                <!--</DataGrid>-->
            </ScrollViewer>
        

cs

        /// <summary>
        /// 单元格改变事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void DataGrid_SelectedCellsChanged(object sender, SelectedCellsChangedEventArgs e)
        {
            DataGrid dataGrid = (DataGrid)sender;
            int selectIndex = dataGrid.SelectedIndex;
            var cntr =  dataGrid.ItemContainerGenerator.ContainerFromIndex(selectIndex);
            DataGridRow ObjRow = (DataGridRow)cntr;
            FrameworkElement objElement = dataGrid.Columns[0].GetCellContent(ObjRow);
            System.Windows.Controls.CheckBox objChk = (System.Windows.Controls.CheckBox)objElement;
            if (objChk.IsChecked == true) {
                objChk.IsChecked = false;
            }
            else
            {
                objChk.IsChecked = true;
            }
        }

        /// <summary>
        /// 建了一个CheckBox,选中则为全选表格,不选中则为不全选表格
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void CheckBox_Click(object sender, RoutedEventArgs e)
        {
            if ((bool)check_all.IsChecked)
            {
                //全选
                for (int i = 0; i < this.dataGrid.Items.Count; i++)
                {
                    var cntr = dataGrid.ItemContainerGenerator.ContainerFromIndex(i);
                    DataGridRow ObjROw = (DataGridRow)cntr;
                    if (ObjROw != null)
                    {
                        FrameworkElement objElement = dataGrid.Columns[0].GetCellContent(ObjROw);
                        if (objElement != null)
                        {
                            //if (objElement.GetType().ToString().EndsWith("cRUID"))
                            //{
                            System.Windows.Controls.CheckBox objChk = (System.Windows.Controls.CheckBox)objElement;
                            if (objChk.IsChecked == false)
                            {
                                objChk.IsChecked = true;
                            }
                            //}
                        }
                    }
                }
            }
            else
            {
                //全不选
                for (int i = 0; i < this.dataGrid.Items.Count; i++)
                {
                    var cntr = dataGrid.ItemContainerGenerator.ContainerFromIndex(i);
                    DataGridRow ObjROw = (DataGridRow)cntr;
                    if (ObjROw != null)
                    {
                        FrameworkElement objElement = dataGrid.Columns[0].GetCellContent(ObjROw);
                        if (objElement != null)
                        {
                            //if (objElement.GetType().ToString().EndsWith("cRUID"))
                            //{
                            System.Windows.Controls.CheckBox objChk = (System.Windows.Controls.CheckBox)objElement;
                            if (objChk.IsChecked == true)
                            {
                                objChk.IsChecked = false;
                            }
                            //}
                        }
                    }
                }
            }
        }

        #region 触摸屏上下滑动
        /// <summary>
        /// scrollviewer 触摸屏上下滑动
        /// </summary>
        double mPointY;//触摸点的Y坐标
        double mOffsetY;//滚动条当前位置
        bool mIsTouch = false;//是否触摸
        private void ScrollViewer_TouchDown(object sender, TouchEventArgs e)
        {
            mIsTouch = true;//正在触摸
            mOffsetY = this.scrollviewer.VerticalOffset;//获取ScrollViewer滚动条当前位置
            TouchPoint point = e.GetTouchPoint(scrollviewer);//获取相对于ScrollViewer的触摸点位置
            mPointY = point.Position.Y;//触摸点的Y坐标
        }

        private void ScrollViewer_TouchMove(object sender, TouchEventArgs e)
        {
            if (mIsTouch == true)//如果正在触摸
            {
                TouchPoint point = e.GetTouchPoint(scrollviewer);//获取相对于ScrollViewer的触摸点位置
                double DiffOffset = point.Position.Y - mPointY;//计算相对位置
                this.scrollviewer.ScrollToVerticalOffset(mOffsetY - DiffOffset);//ScrollViewer滚动到指定位置
            }
        }

        private void ScrollViewer_TouchUp(object sender, TouchEventArgs e)
        {
            mIsTouch = false;//触摸结束
        }
        #endregion

猜你喜欢

转载自blog.csdn.net/shunlijian2283/article/details/84787317