WPF DataGrid 获取选中 一行 或者 多行

Posted 山涧清泉

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WPF DataGrid 获取选中 一行 或者 多行相关的知识,希望对你有一定的参考价值。

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

然而SelectedItem SelectedItems DataGrid的SelectionUnitSelectionMode两个属性的取值不同时有变化

一:当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 获取选中 一行 或者 多行的主要内容,如果未能解决你的问题,请参考以下文章

如何用代码选中datagrid中的某一行

wpf datagrid绑定了数据 如果选中多行中怎么获取选中行的某列的值

C#的wpf工程中由于datagrid中的数据一直在更新所以每次选中某一行时,数据一更新选中就会被取消掉

wpf datagrid根据多选选中的获取单元格内容,进行操作数据

WPF DataGrid获取选择行的数据

wpf datagrid 单元格如何默认单击一次点中