【问题标题】:Select whole column by clicking ColumnHeader. WPF DATAGRID通过单击 ColumnHeader 选择整列。 WPF 数据网格
【发布时间】:2014-06-09 10:54:24
【问题描述】:

我有一个禁用排序的数据网格。我想要实现的是 - 通过单击列标题,我想选择该列中的所有单元格(选择整列)。我已将EventSetter 添加到我的DataGridColumnHeader 以将某些方法绑定到Click 事件,但我不知道应该如何编写此方法。有什么想法吗?

我的代码:

private void columnHeaderClick(object sender, RoutedEventArgs e)
{
        var columnHeader = sender as DataGridColumnHeader;
        if (columnHeader != null)
        {
            if (dgDane.SelectedCells != null)
            {
                dgDane.SelectedCells.Clear();
            }
            foreach (var item in dgDane.Items)
            {
                dgDane.SelectedCells.Add(new DataGridCellInfo(item, columnHeader.Column));                  
            }
            dgDane.Focus();
        }
    }

我编辑了代码,上面的这个工作正常(感谢@nit)。我已将焦点添加到 DataGrid,因为这是必要的。

【问题讨论】:

    标签: c# wpf datagrid


    【解决方案1】:

    这应该可以解决问题

    private void columnHeaderClick(object sender, RoutedEventArgs e)
        {
            var columnHeader = sender as DataGridColumnHeader;
            if (columnHeader != null)
            {
                dataGrid.SelectedCells.Clear();
                foreach (var item in dataGrid.Items)
                {
                    dataGrid.SelectedCells.Add(new DataGridCellInfo(item,columnHeader.Column));
                }
            }
        }
    

    确保将SelectionUnit="Cell" 设置为DataGrid

    <DataGrid x:Name="dataGrid" AutoGenerateColumns="False" IsSynchronizedWithCurrentItem="True"
                SelectionUnit="Cell" /> 
    

    【讨论】:

    • 好吧,它很接近,但是,如果我点击列标题 - 它选择列但它的“非活动选择”,如果我第二次点击某个列,它会返回异常“集合已经包含一个项目”。只有当我单击某个单元格然后单击列标题(另一个然后是所选单元格的列)时,它才能正常工作,但是我只想选择我单击的列,我不想选择这个“额外”1 个单元格。
    • 所以我猜 .Clear() 是不够的 :(
    • 不,它有效 :) 我只是清除了错误的集合,我编写了 SelectedItems 而不是 SelectedCells。感谢帮助 !标记为答案:)
    猜你喜欢
    • 1970-01-01
    • 2011-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-20
    相关资源
    最近更新 更多