Вот что я сделал, используя WPF / C #:
- Используйте DataGrid для отображения данных из DataTable. Этот шаг работает отлично.
- Добавить ContextMenu в DataGrid. Это также, кажется, хорошо, поскольку контекстное меню отображается правильно.
- Используйте контекстное меню для доступа к ячейке, выбранной в 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. Но было сгенерировано исключение, которое говорит: «Указанный аргумент вышел за пределы допустимых значений. Имя параметра: индекс».