wpf DataGrid的选中多行和得到选择数据

       dgList.SelectionUnit = DataGridSelectionUnit.FullRow;
       dgList.SelectionMode = DataGridSelectionMode.Extended;

WPF中DataGrid使用时,需要将其SelectedItem转换成DataRowView进行操作

  然而SelectedItem 与SelectedItems DataGrid的SelectionUnit跟SelectionMode两个属性的取值不同时有变化

  一:当DataGrid.SelectionUnit == DataGridSelectionUnit.FullRow时,获取选中一行与多行的方法:

  1选中多行

   int count = DataGrid.SelectedItems.Count;
            DataRowView[] drv =  new DataRowView[count];
             for ( int i = 0; i < count; i++)
            {
                drv[i] = DataGrid.SelectedItems[i]  as DataRowView;
            }
             return drv;

  2选中一行

  DataGrid.SelectedItem as DataRowView

 

二:但是当DataGrid.SelectionUnit 的属性是Cell或者CellOrRowHeader时,并且SelectionMode的值为 Extented时,这样处理就不太好。因为如果选中的是 cell 则SelectedItem的值为null。所以可以通过Cell来统一处理,无论SelectionUnit 的值是什么,总有选中的单元格,通过单元格确定该行。

 

 

private DataRowView GetSelectedRow()
        {
            /*优化 
             * 无论 DataGrid的SelectionUnit跟SelectionMode两个属性取任何值
             * 都存在选中的单元格
             * 可以根据选中的单元格做统一处理,获取选中的行
             *  GetSelectedRows()方法获取选中多行原理相同
            */

            if (DataGrid != null && DataGrid.SelectedCells.Count != 0)
            {
                //只选中一个单元格时:返回单元格所在行
                //选中多个时:返回第一个单元格所在行
                return DataGrid.SelectedCells[0].Item as DataRowView;
            }

            return null;
        }
        /// <summary>
        /// 私有方法 获取选中的多行
        /// </summary>
        /// <returns></returns>
        private DataRowView[] GetSelectedRows()
        {
            //当选中有多个单元格时,获取选中单元格所在行的数组
            //排除数组中相同的行
            if (DataGrid!=null&&DataGrid.SelectedCells.Count > 0)
            {
                DataRowView[] dv = new DataRowView[DataGrid.SelectedCells.Count];
                for (int i = 0; i < DataGrid.SelectedCells.Count; i++)
                {
                    dv[i] = DataGrid.SelectedCells[i].Item as DataRowView;

                }
                //因为选中的单元格可能在同一行的,需要排除重复的行
                return dv.Distinct().ToArray();
            }
            return null;
        }


你可能感兴趣的:(wpf DataGrid的选中多行和得到选择数据)