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

时间:2011-01-31 16:18:23

标签: wpf vb.net datagrid wpf-controls

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

5 个答案:

答案 0 :(得分:9)

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

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

答案 1 :(得分:5)

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

int columnIndex = dataGrid.CurrentColumn.DisplayIndex;

我在MouseDoubleClick事件或PreviewKeyUp中使用此代码并且工作正常。

答案 2 :(得分:3)

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

e.g。

    <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)

答案 3 :(得分:3)

每个身体都讲述了这个解决方案

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

并且是的它有效,但是没有人告诉我们必须先为每一列设置显示索引,对于专家来说可能是显而易见的,但是对于初学者来说这是不熟悉的事情

有两种方法可以设置它: -

1)您可以在XAML部分设置..

<DataGridTextColumn Header="Serial No." Width="60"  IsReadOnly="True" Binding="{Binding Path=Sno}" DisplayIndex="1"></DataGridTextColumn>

我不知道如何为

等自定义列设置它
    <DataGridTemplateColumn.CellTemplate>
                                   <DataTemplate>                                                            
    <CheckBox x:Name="ChkItem" IsChecked="{Binding Path=Sno}"/>                                
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>

所以我更喜欢另一种方式

2)创建了一个功能

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;

然后你肯定会得到索引

答案 4 :(得分:0)

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

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