Как использовать ContextMenu для доступа к значению ячейки DataGrid? - PullRequest
0 голосов
/ 24 мая 2019

Вот что я сделал, используя WPF / C #:

  1. Используйте DataGrid для отображения данных из DataTable. Этот шаг работает отлично.
  2. Добавить ContextMenu в DataGrid. Это также, кажется, хорошо, поскольку контекстное меню отображается правильно.
  3. Используйте контекстное меню для доступа к ячейке, выбранной в DataGrid, и используйте значение ячейки для дальнейшей работы. Это шаг, на котором я застрял.

Я исследовал и пробовал другие подобные вопросы SO в последние пару дней, но не повезло. Может кто-нибудь, пожалуйста, помогите мне понять это правильно?

Я использую Visual Studio 2019, и это проект WPF Framework. Я попробовал подход от dsfgsho. См. Ссылку Получение контекстного меню таблицы данных WPF. Нажмите Row

.
//  Originally from dsfgsho, with slight changes.

private void MenuItem_Click(object sender, RoutedEventArgs e)
{
    //Get the clicked MenuItem
    var menuItem = (MenuItem)sender;

    //Get the ContextMenu to which the menuItem belongs
    var contextMenu = (ContextMenu)menuItem.Parent;

    //Find the placementTarget
    var item = (DataGrid)contextMenu.PlacementTarget;

    //Get the underlying item, that you cast to your object that is bound
    //to the DataGrid (and has subject and state as property)
    var selected_tbl_name = (DataColumn)item.SelectedCells[0].Item;
    //****The last step is where I get confused and it also throws an exception. 
}

XAML:

<Grid>
    <DataGrid 
        x:Name="dataGrid_test" 
        ItemsSource="{Binding}" 
        SelectedItem="{Binding SelectedItemPorperty}"
        HorizontalAlignment="Left" 
        Height="369" 
        Margin="395,10,0,0" 
        VerticalAlignment="Top" 
        Width="381" 
        SelectionChanged="DataGrid_SelectionChanged"
        >
        <DataGrid.ContextMenu>
            <ContextMenu>
                <MenuItem Header="Select" Click="MenuItem_Click">
                </MenuItem>
            </ContextMenu>
        </DataGrid.ContextMenu>
    </DataGrid>
</Grid>

Относительно последней строки функции MenuItem_Click (отправитель объекта, RoutedEventArgs e): так как я использую DataGrid с DataTable, я думаю, что базовый элемент будет ячейкой DataTable. Есть ли тип для ячейки DataTable? Я не могу найти его, поэтому я использовал DataCloumn. Но было сгенерировано исключение, которое говорит: «Указанный аргумент вышел за пределы допустимых значений. Имя параметра: индекс».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...