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 获取选中 一行 或者 多行的更多相关文章

  1. c# WPF DataGrid 获取选中单元格信息

    private void Dg_SelectedCellsChanged(object sender, SelectedCellsChangedEventArgs e) { Console.Write ...

  2. 【转】WPF DataGrid 获取选中的当前行某列值

    方法一:DataRowView mySelectedElement = (DataRowView)dataGrid1.SelectedItem; string result = mySelectedE ...

  3. WPF DataGrid 获取选中的当前行某列值

    方法一: DataRowView mySelectedElement = (DataRowView)dataGrid1.SelectedItem; ]ToString(); 方法二: var a = ...

  4. WPF DataGrid获取选择行的数据

    在WPF中,单击DataGrid,如何获取当前点击的行? 比如在MouseDoubleClick事件中,事实上获取的选中行是一个DataRowview,你可以通过以下的方法来获取选中行的数据,需要引用 ...

  5. WPF TextSelection获取选中部分内容

    一.简单实例 //TextSelect继承自TextRange TextSelection selection = richTextBox.Selection; //1.获取选中内容 string r ...

  6. wpf ComboBox 获取选中项的文本内容

    一:根据数据源类型获取选中项 类: public class Region { public int REGION_ID { get; set; } public string REGION_CODE ...

  7. WPF datagrid 获取行或单格为NULL 问题

    datagrid  属性 EnableRowVirtualization 设置为 false 解决...不要问我为什么. 害死我了

  8. jquery easyui datagrid 获取选中多行

    var rows = $('#dataTable').datagri('getSelections');

  9. WPF DataGrid 增加"更新"模板列,根据行Row的选择而显示"更新"按钮

    SelectionMode="Single" <DataGridTemplateColumn Header=""> <DataGridTemp ...

随机推荐

  1. 【LeetCode】String to Integer (atoi)(字符串转换整数 (atoi))

    这道题是LeetCode里的第8道题. 题目要求: 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当我们 ...

  2. [UOJ#221][BZOJ4652][Noi2016]循环之美

    [UOJ#221][BZOJ4652][Noi2016]循环之美 试题描述 牛牛是一个热爱算法设计的高中生.在他设计的算法中,常常会使用带小数的数进行计算.牛牛认为,如果在 k 进制下,一个数的小数部 ...

  3. BZOJ 2693 jzptab ——莫比乌斯反演

    同BZOJ 2154 但是需要优化 $ans=\sum_{d<=n}d*\sum_{i<=\lfloor n/d \rfloor} i^2 *\mu(i)* Sum(\lfloor \fr ...

  4. Idea基本讲解、常用配置以及快捷键设置

    IDEA官网学习文档:https://www.jetbrains.com/idea/documentation/ IDEA官网入门教程:https://www.jetbrains.com/help/i ...

  5. VirtualBox虚拟机出现被召者 RC: E_NOINTERFACE (0x80004002)

    选中VirtualBox右键 就可以正常运行了

  6. Java常用API(Scanner,Random)匿名对象

    API:即Application programming Interface,应用编程接口. Java中封装了许许多多的API供用户使用,Scanner与Random便是其中之一,API实际就是类,已 ...

  7. amplab

    https://github.com/amplab/SparkNet https://amplab.cs.berkeley.edu/

  8. Go -- 判断chan channel是否关闭的方法

    如果不判断chan是否关闭 Notice: 以下代码会产生死循环 代码如下: package main import ( "fmt" ) func main() { c := ma ...

  9. 全能无线渗透测试工具,一个LAZY就搞定了

    近来一直在研究无线安全方面的东西,特别是在无线渗透测试这块,每次渗透测试时总要来回不停的切换操作和挑选利器,很是麻烦.就想看看是否可以有一款功能全面的集合型工具. 正所谓功夫不负有心人,还真有这么一个 ...

  10. 基于Lua插件化的Pcap流量监听代理

    1.前言 我们在实际工作中,遇到了一个这样的用例,在每天例行扫描活动中,发现有些应用系统不定期的被扫挂,因为我们不是服务的制造者,没有办法在不同的系统里打印日志,所以我们就想用一个工具来获取特定服务的 ...