WPF中DataGrid使用时,需要将其SelectedItem转换成DataRowView进行操作
然而SelectedItem与SelectedItemsDataGrid的SelectionUnit跟SelectionMode两个属性的取值不同时有变化
一:当DataGrid.SelectionUnit == DataGridSelectionUnit.FullRow时,获取选中一行与多行的方法:
1选中多行
int count = DataGrid.SelectedItems.Count;
DataRowView[] drv = new DataRowView[count];
for (int i = 0; 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;
}
///
/// 私有方法 获取选中的多行
///
///
private DataRowView[] GetSelectedRows()
{
//当选中有多个单元格时,获取选中单元格所在行的数组
//排除数组中相同的行
if (DataGrid!=null&&DataGrid.SelectedCells.Count > 0)
{
DataRowView[] dv = new DataRowView[DataGrid.SelectedCells.Count];
for (int i = 0; i
{
dv[i] = DataGrid.SelectedCells[i].Item as DataRowView;
}
//因为选中的单元格可能在同一行的,需要排除重复的行
return dv.Distinct().ToArray();
}
return null;
}
今天的文章datagrid wpf 获取选中_WPF DataGrid 获取选中 一行 或者 多行分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/28333.html