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

7

当我点击WPF Datagrid中的单元格时,如何返回该项的列索引?我正在使用Visual Studio 2010/VB.Net。

5个回答

9
您是否尝试在列索引的事件单击中使用此功能?
int columnIndex = dataGrid.CurrentColumn.DisplayIndex;

我在鼠标双击事件或预览按键事件中使用此代码,效果非常好。

这可能适用于Win Forms数据网格,但不适用于WPF数据网格。后者没有CurrentColumn属性。 - SQLServerSteve
这对我很有帮助,在WPF DataGrid上完美运行。 - Adam Miklosi

9
您可以直接使用以下代码来获取选定单元格的列索引。
int index = datagrid.SelectedCells[0].Column.DisplayIndex;

4

大家都在谈论这个解决方案

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

是的,它有效,但没有人告诉我们必须为每列设置显示索引,这对于专家来说可能很明显,但对于新手来说,这是一个陌生的事情。

有两种方法可以设置它:

  1. 您可以在XAML部分中设置它。

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

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

所以我更喜欢另一种方式。
  1. Created A function

    private 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

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(presenter.ItemContainerGenerator.ContainerFromIndex(index))查找单元格,即使用户移动了列,列的显示索引也不会改变。 - stuicidle

0

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接