WPF中如何实现在datagrid中点击列头实现整列选中(一) |
您所在的位置:网站首页 › 表格如何选中一行一列 › WPF中如何实现在datagrid中点击列头实现整列选中(一) |
这个问题困扰了我好几天。目前找到一个看似简单的办法。 第一步:找到点击的列头,这里重写列的排序方法,来确定列号。我是模拟Excel的列头,字母A-Z一共26个列。这个很容易实现。 private void _datagrid_Sorting(object sender, DataGridSortingEventArgs e) { var SelectColumn = e.Column.Header.ToString(); int index = Utils.GetColumnIndex(SelectColumn); SelectAllColumn(_datagrid, index); e.Handled = true; }第二步:把找到的列序号和datagrid 一起传入新的方法。SelectAllColumn,当然你也可以直接在上面的方法里面写,这样界面简洁一点。 这个方法的简便之处在于,在datagrid中寻找某一列的所有内容,因为它最终都是一个TextBlock,然后把这个TextBlock的parent的找到,也就是cell了。再把这个cell加入到datagrid.SelectedCells.里面就行了。因为加入后,cell.IsSelected就等于true了,所以表格会自动被选中。 private void SelectAllColumn(DataGrid dg, int index) { int totalRow = myDataTable.Rows.Count; dg.SelectedCells.Clear(); DataGridCell cell; for (int i= 0; i < totalRow;i++) { TextBlock txtblock = (dg.Columns[index].GetCellContent(dg.Items[i]) as TextBlock); cell = (DataGridCell)txtblock.Parent; dg.SelectedCells.Add(new DataGridCellInfo(cell)); } }第三步:如果你的列不长,我的是256行,上面的代码基本可以工作了。但是它仅仅能在窗口可见部分不会报错。也就是说你的行数如果很多的话,用上面的代码会出错。比如可见行是20行,而实际你的数据表的行数超过20,它就会找不到TextBlock。这里,你需要用datagrid.ScrollIntoView这个方法来让表格滚动到下一个20行,然后继续。我尝试了一下这个方法,非常的慢,虽然也可以实现。 第四步:如果不想用第三步,因为比较慢。可以在xaml文件里面修改datagrid的属性,让可视这个功能关闭。 VirtualizingPanel.IsVirtualizing = "False" |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |