(WPF Datagrid)如何确定项目的列索引

Posted

技术标签:

【中文标题】(WPF Datagrid)如何确定项目的列索引【英文标题】:(WPF Datagrid) How do I determine the Column Index of an Item 【发布时间】:2011-06-18 16:48:58 【问题描述】:

当我单击一个单元格时,如何返回 WPF 数据网格中项目的列索引 我正在使用 Visual Studio 2010/VB.Net

【问题讨论】:

【参考方案1】:

DataGridCells 没有 Click 事件,它们有一个 Selected 事件,但是当您单击一个单元格时,通常会为一行中的每个单元格触发该事件。 GotFocus 可能是更好的选择。

例如

    <DataGrid ItemsSource="Binding Data">
        <DataGrid.CellStyle>
            <Style TargetType="x:Type DataGridCell">
                <EventSetter Event="GotFocus" Handler="CellClick"/>
            </Style>
        </DataGrid.CellStyle>
    </DataGrid>

和:

    void CellClick(object sender, RoutedEventArgs e)
    
        DataGridCell cell = sender as DataGridCell;
        MessageBox.Show(cell.Column.DisplayIndex.ToString());
    

DataGridCell.Column.DisplayIndex 似乎返回了一个适当的索引,如果它还不够,你可以使用DataGrid.Columns.IndexOf(DataGridCell.Column)

【讨论】:

DataGrid.Columns.IndexOf(DataGridCell.Column) 为使用演示者 (presenter.ItemContainerGenerator.ContainerFromIndex(index)) 查找单元格提供正确的索引,即使用户已移动列,列显示索引不【参考方案2】:

每个人都讲述这个解决方案

Int32 columnIndex = dataGridScannedFiles.SelectedCells[0].Column.DisplayIndex;

是的,它可以工作,但没有人告诉我们必须首先为每一列设置显示索引,也许专家很容易做到这一点,但对于新手来说,这是一件陌生的事情

有两种设置方式:-

    你可以在 XAML 部分设置它。

我不知道如何为自定义列设置它

    <DataGridTemplateColumn.CellTemplate>
                                   <DataTemplate>                                                            
    <CheckBox x:Name="ChkItem" IsChecked="Binding Path=Sno"/>                                
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>

所以我更喜欢另一种方式

    创建了一个函数

    私有 void SetDisplayIndexforGridViewColumns() Int32 ColumnCount = dt.Columns.Count;

             for (int i = 0; i < ColumnCount; i++) 
             
                 dataGridScannedFiles.Columns[i].DisplayIndex = i;
    
             
         
    

dt 是我的数据表

我正在为其分配显示索引

现在如果你使用

Int32 columnIndex = dataGridScannedFiles.SelectedCells[0].Column.DisplayIndex;

那么你一定会得到索引

【讨论】:

【参考方案3】:

您可以直接使用下面的代码来获取选定的单元格列索引。

int index = datagrid.SelectedCells[0].Column.DisplayIndex;

【讨论】:

【参考方案4】:

您尝试在事件点击中使用此列索引?

int columnIndex = dataGrid.CurrentColumn.DisplayIndex;

我在 MouseDoubleClick 事件或 PreviewKeyUp 中使用此代码并且运行良好。

【讨论】:

这可能适用于 Win Forms 数据网格,但不适用于 WPF 数据网格。后者没有 CurrentColumn 属性。 这帮助了我,在 WPF DataGrid 上完美运行。【参考方案5】:

从 DataGrid 中获取特定列名的列索引(在 wpf 中使用 linq)

  int index = DataGrid.Columns.Single(c => c.Header.ToString() == "Department").DisplayIndex;

【讨论】:

以上是关于(WPF Datagrid)如何确定项目的列索引的主要内容,如果未能解决你的问题,请参考以下文章

确定表中输入的行和列索引

如何防止 WPF DataGrid 在项目更新时取消选择 SelectedItem?

如何确定 WPF DataGrid 是不是处于编辑模式? [复制]

c# winform编程 数据库 .net 怎么获取datagridview中选中列的列索引?

具有相同查找值的自动递增列索引 (VLOOKUP)

如何检索 JQuery 数据表的排序状态