(WPF Datagrid) Как определить индекс столбца элемента - PullRequest
7 голосов
/ 31 января 2011

Как вернуть индекс столбца элемента в сетке данных WPF, когда я нажимаю на ячейку Я использую Visual Studio 2010 / VB.Net

Ответы [ 4 ]

9 голосов
/ 27 ноября 2012

Вы можете использовать приведенный ниже код напрямую, чтобы получить индекс столбца выбранных ячеек.

int index = datagrid.SelectedCells[0].Column.DisplayIndex;
6 голосов
/ 06 апреля 2015

Вы пытались использовать это в указателе события для индекса столбца?

int columnIndex = dataGrid.CurrentColumn.DisplayIndex;

Я использую этот код в MouseDoubleClick Event или PreviewKeyUp и отлично работает.

3 голосов
/ 13 сентября 2012

Каждое тело говорит об этом решении

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;

, тогда вы обязательно получите индекс

3 голосов
/ 31 января 2011

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

...